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'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |