如何在Protractor测试中验证$ httpBackend模拟期望值?

Eln*_*mov 5 angularjs protractor

我正在开发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');
    });
});
Run Code Online (Sandbox Code Playgroud)

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

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

$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
Run Code Online (Sandbox Code Playgroud)

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

如何访问我添加到的同一个$httpBackend实例?httpBackendMockbrowser

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

Eln*_*mov 0

我找到了比使用该$httpBackend方法更好的解决方案。

由于您在 Node.js 上运行 Protractor 测试,因此使用一些 Node.js 包来模拟后端更有意义,而不是我在问题中提出的这个丑陋且黑客的解决方案。

Hock对我来说效果很好,因此我建议使用它或类似的东西。