我有以下简单的工厂,我想写一个单元测试。
(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不是函数。我会注意到,如果我将工厂声明更改为下面的代码,我可以解决这个问题,但我们遇到了一个问题,即缩小参数名称并将其更改为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函数,但不确定我将如何去做。我可能错过了一些非常明显的东西,所以非常感谢任何帮助。
答案 0 :(得分:0)
好的,我知道这个例子出了什么问题。最终,如果我重构我的工厂,我可以简单地在我的单元测试中打电话给属性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);
});});