量角器中的addMockModule没有为$ httpBackend添加模块

时间:2015-12-10 16:18:13

标签: angularjs jasmine protractor

我在下面的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();
    });
  });

1 个答案:

答案 0 :(得分:1)

您必须在browser.get()来电之前添加所有模拟:

beforeEach(function(){
    browser.addMockModule('httpBackendMock', httpBackendMock);
    browser.get(desiredUrl);
});

另请注意,console.log() 中的httpBackendMock次来电将登录到浏览器的控制台而不是您所在的终端/控制台执行你的测试。 Check your browser logs并且,如果您看到data值和"执行"在那里打印,你有嘲笑的后端,问题在于你嘲笑你的反应。