我在下面的AngularJS量角器测试中添加了一个模拟模块,它似乎没有被拾取。 api调用直接进入真正的api。此外,当我执行console.log(浏览器)时,我看到:
名称:' httpBackendMock',脚本:[功能],参数:[]}
httpBackendMock中的console.log语句都没有被触发。
describe('successful login', function(done) {
var httpBackendMock = function() {
angular.module('httpBackendMock', ['ngMockE2E', 'sampleapp']).run(function($httpBackend) {
var authenticated = false;
var testAccount = {
email: 'test@example.com'
};
$httpBackend.whenPOST('/login').respond(function(method, url, data, headers) {
console.log(data);
console.log("executing");
return [200, {loggedIn: true}, {}];
});
$httpBackend.whenGET(/.*/).passThrough();
})
};
beforeEach(function(){
browser.addMockModule('httpBackendMock', httpBackendMock);
});
it('should login', function(done) {
console.log(httpBackendMock.toString());
console.log(browser);
var url = browser.getCurrentUrl();
element(by.id('user-input')).sendKeys('someuser');
element(by.id('password-input')).sendKeys('somepassword');
element(by.css('.btn-default')).click();
expect(browser.getCurrentUrl()).toNotBe(url);
expect(browser.getCurrentUrl()).toContain('account-page');
done();
});
});
答案 0 :(得分:1)
您必须在browser.get()
来电之前添加所有模拟:
beforeEach(function(){
browser.addMockModule('httpBackendMock', httpBackendMock);
browser.get(desiredUrl);
});
另请注意,console.log()
中的httpBackendMock
次来电将登录到浏览器的控制台而不是您所在的终端/控制台执行你的测试。 Check your browser logs并且,如果您看到data
值和"执行"在那里打印,你有嘲笑的后端,问题在于你嘲笑你的反应。