我有以下简单工厂,我想围绕它编写单元测试。
(function () {
"use strict";
angular
.module("math")
.factory("addservice", [addTwoNumbers]);
function addTwoNumbers(a, b) {
return a + b;
}
return { add: addTwoNumbers };
})();
这是我迄今为止在测试规范中所拥有的内容。
describe('adding two numbers', function () {
var addService;
beforeEach(function () {
module('math');
inject(function ($injector) {
addService = $injector.get('addservice');
});
});
it('should add two numbers and get 2', function () {
var result = addService.add(1, 1);
expect(result).toBe(2);
});
});
当尝试运行此单元测试时,我收到 TypeError: addService.add is not a function。我会注意到,如果我将工厂声明更改为下面看到的代码,我就可以让它工作,但我们遇到了一个问题,即缩小搞乱了参数名称并将它们更改为 a、b、c 等。 (当传入 $q、$http 和许多其他依赖项时)并破坏代码,因此我们转向上面看到的内容。这显然是一个非常基本的示例,这就是为什么我无法让它工作的原因如此令人沮丧。
(function () {
"use strict";
angular
.module("math")
.factory('addservice', [function () {
function addTwoNumbers(a, b) {
return a + b;
}
return { add: addTwoNumbers };
}
]);
})();
似乎我需要以某种方式引用 addTwoNumbers 函数,但不确定我将如何去做。我可能遗漏了一些非常明显的东西,因此非常感谢任何帮助。
最佳答案
好的,我明白了这个例子出了什么问题。如果我稍微重构一下我的工厂,我就可以在获得对工厂本身的引用后,在单元测试中简单地调用属性twoNumbersAddedTogether。我在下面提供了新的单元测试和工厂代码。
工厂代码
(function () {
"use strict";
angular
.module("math")
.factory("addservice", [addTwoNumbers]);
function addTwoNumbers() {
return {twoNumbersAddedTogether: dotheMath}
function dotheMath(a,b) {
return a + b;
}
}
})();
单元测试代码
describe('adding two numbers', function () {
var addService;
beforeEach(function () {
module('math');
});
beforeEach(inject(function (_addservice_) {
addService = _addservice_;
}));
it('should add two numbers', function () {
var result = addService.twoNumbersAddedTogether(1, 1);
expect(result).toBe(2);
});});
关于javascript - Jasmine 和 AngularJS - 当函数用作依赖项时如何测试工厂函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709109/