Jasmine:尝试测试AngularJS工厂函数

时间:2015-04-26 21:52:28

标签: angularjs jasmine

我对AngularJS中的测试完全不熟悉。我已经设置了业力,现在我正试图在我写的工厂中测试某个功能。

以下是我工厂的片段:

app.factory('helpersFactory', ['constants', function (constants) {
    return {

        someFunction: function() {
        },

        is24x24Icon: function (iconNum) {
            return ((iconNum >= 10090 && iconNum <= 10125) ;
        }
    };

 }]);
然后我接受了这个测试:

describe('Factory: helpersFactory', function () {

    beforeEach(module('ppMobi'));

    var fct;
    beforeEach(inject(function ($factory) {
        fct = $factory('helpersFactory');
    }));

    it('should detect iconNum 10090 is a 24 x 24 icon', function () {

        var iconNum = 10090;
        var is24x24Icon = fct.is24x24Icon(iconNum);
        expect(is24x24Icon).toBeTruthy();

    });
});

我从Karma那里得到一个错误,告诉我它无法读取&#39; is24x24icon&#39;未定义的。因此,我只能假设我的工厂在测试期间没有正确创建。我确实依赖于其他函数使用的工厂中的常量。这只是我在主应用程序模块上设置的angular.constant()。

我找到了其他一些帖子,但我不确定如何继续,我是否需要将常量依赖项注入我的测试中?

1 个答案:

答案 0 :(得分:3)

有点新的我自己,但我认为你需要使用下划线名称下划线技巧来注入你的工厂:

var fct;
beforeEach(inject(function (_helpersFactory_) {
    fct = _helpersFactory_;
}));

这个博客使用了摩卡,但我发现它很有用,而且Karma的内容应该是相同的:https://www.airpair.com/angularjs/posts/testing-angular-with-karma

是的,您还需要注入常量(链接显示如何),但您发布的代码似乎没有使用常量,因此您不会因此特定测试而需要它。