javascript - Jasmine 和 AngularJS - 当函数用作依赖项时如何测试工厂函数

标签 javascript angularjs unit-testing jasmine

我有以下简单工厂,我想围绕它编写单元测试。

    (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/

相关文章:

java - 对我的方法进行 JUnit 测试

unit-testing - 可以以编程方式生成 jpeg 图像吗?

unit-testing - 使用 go test (golang) 查找失败的测试文件名

javascript - 清除文本和重置搜索输入的按钮不起作用

javascript - 处理 Javascript 中的元组 : container data structures

javascript - 如何利用时刻查找 18 个月前的第一个星期一

angularjs - Kibana 6.1.1自定义插件(可视化)

javascript - Angular + UI 路由器,更改 $stateChangeSuccess 上的标题(事件触发得太早?)

javascript - 如何在 Javascript 中转置存储为一维数组的二维方阵

javascript - 使元素可点击的 Angular Directive(指令)?