我有一个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
答案 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
}