加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何在量角器测试中验证$httpBackend模拟期望值?

发布时间:2020-12-17 10:22:13 所属栏目:安全 来源:网络整理
导读:我正在开发REST API的前端.我正在使用Protractor进行端到端测试,并且模拟了API,因为我希望能够单独测试前端. 这是我得到的一个简单的测试: describe('partner',function () { it('should list partners',function () { var page = new PartnerListPage(); v
我正在开发REST API的前端.我正在使用Protractor进行端到端测试,并且模拟了API,因为我希望能够单独测试前端.

这是我得到的一个简单的测试:

describe('partner',function () {
    it('should list partners',function () {
        var page = new PartnerListPage();
        var httpBackendMock = function () {
            angular.module('httpBackendMock',['ngMockE2E'])
                .run(function ($httpBackend) {
                    $httpBackend.whenGET('/api/partners').respond(200,{
                        _embedded: {
                            partners: [
                                {
                                    firstName: 'Elnur',lastName: 'Abdurrakhimov'
                                }
                            ]
                        }
                    });
                    $httpBackend.whenGET(/.*/).passThrough();
                });
        };
        browser.addMockModule('httpBackendMock',httpBackendMock);

        page.open();
        expect(page.isOpen()).toBeTruthy();
        expect(page.getPartner(0).firstName).toBe('Elnur');
        expect(page.getPartner(0).lastName).toBe('Abdurrakhimov');
    });
});

它的作用基本上是创建后端的模拟,以便它返回我想要的东西.

除了一件事,这一切都很好,花花公子.我希望能够在测试结束时调用以下方法:

$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();

我想这样做的原因是验证模拟是否获得预期的请求.对于我提供的测试没有多大意义,但是我要说我想验证当我提交某个表单时,正在执行具有特定数据的特定POST请求.我想在后端模拟自身上进行验证,以便我的测试与输出该POST请求的响应结果隔离,因为它将在另一个测试中进行测试.

如何访问我添加到浏览器中的httpBackendMock中使用的同一$httpBackend实例?

据我所知,Protractor和应用程序本身在不同的进程中运行.因此,我无法像在单元测试中那样直接访问$httpBackend.

您的应用程序在一个单独的进程中在浏览器和量角器中执行.所以你是对的,你无法直接访问浏览器上下文.

幸运的是,量角器为execute javascript in the browser提供了一种机制.我猜你可以使用这种机制来访问$httpBackendMock.

browser.executeAsyncScript(function() {
  var $httpBackend = angular.injector(['httpBackendMock']).get('$httpBackend');
  $httpBackend.verifyNoOutstandingExpectation();
  $httpBackend.verifyNoOutstandingRequest();
});

注意:代码改编自this answer.

另一种选择可能是公开“检查URL”

$httpBackend.whenGET('/api/check').respond(function() {
    $httpBackend.verifyNoOutstandingExpectation();
    $httpBackend.verifyNoOutstandingRequest();
    return [200];
});

并在你的测试中使用它:

browser.get('/api/check');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读