我可以在测试中使用真实服务进行其他服务吗?

时间:2016-01-27 23:39:36

标签: angularjs karma-jasmine

我有一个angularJS应用程序,它有两个服务。我使用其中一个服务(CONSTANT)只返回基于名称存储的代码。我正在使用它,以便我的代码更具可读性,我可以使用类似CONSTANT.APPLE的内容而不是“苹果”的代码。这可能是7898734.我使用Karma来测试在其自身内使用CONSTANT服务的服务。到目前为止,我一直在嘲笑这样的CONSTANT服务:

    CONSTANT = {
        APPLE: 564,
        BANANA: 566,
        KIWI: 577,
        PINEAPPLE: 522455013
    };

    $provide.value('CONSTANT', CONSTANT);

但是,随着我添加更多测试,我几乎只是在测试中复制了我的整个CONSTANT服务。有没有什么方法可以将真正的CONSTANT服务注入我的测试而不是为它创建一个模拟?

我试过像在实际服务中那样注入它:

describe('ServiceToTest', ['CONSTANT', function (CONSTANT) {...}]);

但是我从Karma那里得到了这个错误:

Uncaught Error: describe does not expect a done parameter

1 个答案:

答案 0 :(得分:0)

我在我的代码中做了类似的事情但不是常量。您只需在测试文件夹和文件中创建一个辅助文件,创建一个普通的角度服务,然后在测试中注入该服务。

你还可以做的不是在服务中使用常量,而是在app模块中定义它们,所以每次使用该模块时,你都会拥有它们。 你可以这样做:

angular
    .module('main', [])
    .constant('FruitConstants', {
        APPLE: 564,
        BANANA: 566,
        KIWI: 577,
        PINEAPPLE: 522455013
    })
//The rest of your module

然后在您必须使用它们的服务中,您只需注入“FruitConstants”,就像它们是另一项服务一样:

 angular
    .module('main')
    .service("SomeService", someService);

someService.$inject = ['FruitConstants'];

 function someService(FruitConstants){
     //Your service logic    
}