如何使用jasmine测试具有依赖关系的角度服务?

时间:2017-03-16 10:31:29

标签: javascript angularjs unit-testing mocking jasmine

我的服务看起来像那样:

System.InvalidCastException: Unable to cast object of type 'Ok[System.Boolean,System.Object]' to type 'Result`2[System.Object,System.Object]'.

我如何为服务注入特定的依赖项?例如,我想只为我的服务注入angular.module('app').service('MyService' , function (dependency1, dependency2, dependency3 ...) { function funcToTest() { // Do something } } 而我并不关心其他依赖项。

2 个答案:

答案 0 :(得分:1)

与单元测试Angular控制器不同,我们无法直接传递依赖关系。这是$provide服务拯救的地方!

以下是一个示例:

beforeEach(module('myApp', function ($provide) {

    mockDependecy2 = {
        mockFunction: function() {}
    };

    $provide.value('dependency2', mockDependecy2);
}));

然后,您可以正常编写规范:

beforeEach(inject(function(_MyService_, ...) {
    ...
    MyService = _MyService_;
}));

describe("...", function() {
    it("...", function() {
        MyService.funcToTest();
        // write expect statements here
    })
})

如示例中所示,您可以(可选)用下划线括起它们,当解析引用名称时,下划线会被注入器忽略。

答案 1 :(得分:0)

无论在何处使用,都会自动在您的服务中注入dependency2

var dependency2;

beforeEach(function () {
    inject(function (dependency2){
        dependency2 = dependency2;
    });
}