我可以在添加了addMockModule的模块中调用函数吗? (量角器)

时间:2016-04-12 15:34:34

标签: angularjs protractor babeljs e2e-testing httpbackend

我目前正在使用Protractor测试AngularJS应用程序,使用browser.addMockModule()模拟其后端(基于对#125的讨论)并使用$ httpBackend模拟进行E2E测试并附加“数据”模块(myDataModule)帮助我管理响应(在this.mockLayer中),将它们保存在另一个文件中。

以下是代码的简化版本:

//here I add the data module
browser.addMockModule('myDataModule', (mockLayer) => {
    angular.module('myDataModule', []).value('mockLayer', mockLayer);
}, this.mockLayer);

//then I mock the $httpBackend using the data module
browser.addMockModule('httpBackendMock', () => {
    angular.module('httpBackendMock', ['myDataModule'])
        .run(['$httpBackend', 'mockLayer', ($httpBackend, mockLayer) => {

        $httpBackend.whenGET(/\/api\/v1\.0\/foo\/bar/)
            .respond(200, mockLayer.fooBar);
        });

        let result = mockLayer.dummy( 3, 2 );
        // result is expected to be 5, right?

        //...
   }]);
});

这里是我实例化的MockLayer类并添加为this.mockLayer

export class MockLayer {
    constructor() {
        this.fooBar = {
            foo: 'bar'
        };
    }

    dummy( a, b ) {
        return a + b;
    }
}

这里的问题是,即使mockLayer.fooBar被找到并且在第二个模块上没有出现问题,也找不到函数mockLayer.dummy()。我在控制台上得到了这个:

11:33:25.960 WARN - Exception thrown
org.openqa.selenium.WebDriverException: unknown error:
mockLayer.dummy is not a function

APImodule.value()

  

使用$ injector注册值服务,例如字符串,数字,数组,对象或函数。

所以我可以使用module.value()来保存对象或函数。内部函数的对象也应该有效。

另外,我了解测试代码在服务器(量角器)端运行,应用程序代码在客户端运行(在浏览器上有角度)。但我不确定这与这种行为有什么关系。

另一方面,protractor docs说明browser.addMockModule()

  

这将在浏览器上下文中执行,因此它无法访问其范围之外的变量。

但这并不是(据我所知)访问其范围之外的任何变量。

所以...... 我做错了什么?或者这是一个错误还是与量角器如何通过webdriver在浏览器上配置$ httpBackend来发送代码相关的东西?

BTW,我正在使用

  • angular-mocks 1.5.0
  • 量角器2.5.1
  • babel~5.8
  • chrome浏览器

值得指出这个问题与this one类似,但它应该在量角器1.8中修复。

0 个答案:

没有答案