我正在使用Protractor在我的应用程序中进行一些端到端测试。在测试中,我使用MockModule模拟后端调用如下:
describe('Lets test a feature' , function(){
beforeAll(function () {
var customerE2E = function () {
angular.module('customerE2E', ['customer', 'ngMockE2E'])
.run(function ($httpBackend) {
$httpBackend.whenPOST('/api/data').respond(200);
$httpBackend.whenGET(/^.*/).passThrough();
});
};
browser.addMockModule('customerE2E', customerE2E);
});
it('correctly demonstrates my problem', function () {
expect(element(by.css('h4')).getText()).toMatch('Hello world');
}
})
这个工作真的很好,但我的问题是我还想测试我的应用程序当帖子用404,500等响应时我已经解决了这个问题,我为每个人提供了一个新的"描述" -function只是能够从"它" -functions中覆盖这个调用会很好。
it('correctly demonstrates my problem', function () {
expect(element(by.css('h4')).getText()).toMatch('Hello world');
}
it('show error due to bad request', function () {
/*
Replace $httpBackend.whenPOST('/api/data').respond(200);
with $httpBackend.whenPOST('/api/data').respond(404);
*/
expect(element(by.css('h4')).getText()).toMatch('Failed api call');
}
我真的很陌生,所以我想知道是否有一种很好的方法可以轻松覆盖在beforeAll-function中设置的早期MockModuled。
答案 0 :(得分:2)
您可以使用beforeEach()
来实现它。
describe('Test Mock Module',function () {
var statusCodes = [200,404,500];
var currentTestNumber = 0;
beforeAll(function () {
var customerE2E = function () {
angular.module('customerE2E', ['customer', 'ngMockE2E'])
.run(function ($httpBackend) {
$httpBackend.whenPOST('/api/data').respond(200);
$httpBackend.whenGET(/^.*/).passThrough();
});
};
browser.addMockModule('customerE2E', customerE2E);
});
/*Below method will be executed before each test and set the required response respectively*/
beforeEach(function () {
$httpBackend.whenPOST('/api/data').respond(statusCodes[currentTestNumber++]);
});
it('test 200 status code',function () {
expect(element(by.css('h4')).getText()).toMatch('Message for 200 status code');
});
it('test 404 status code',function () {
expect(element(by.css('h4')).getText()).toMatch('Message for 404 status code');
});
it('test 500 status code',function () {
expect(element(by.css('h4')).getText()).toMatch('Message for 500 status code');
});
});