【问题标题】:How can I write a unit test for angularJs Factory如何为 angularJs Factory 编写单元测试
【发布时间】:2015-08-19 11:02:56
【问题描述】:

编辑:(添加测试代码)

嗨,我有这个工厂,它没有任何函数定义。我不知道如何为它编写单元测试(我看到了很多例子,但仍然找不到方法来做到这一点,如果您有任何建议或帮助我将非常感谢) 我的工厂:

MyApp.factory('params', ['$rootScope', function ($rootScope) {
    // supported languages
    var params = {
        layout: {
            pageAutoScrollOnLoad: 2000
            pageSidebarClosed: false, 
            pageBodySolid: false, 

        },
        layoutImgPath: Metronic.getAssetsPath() + 'app/img/',
        layoutCssPath: Metronic.getAssetsPath() + 'app/css/'
    };
    $rootScope.params = params;
    return params;
}]);

正如@MoLow 提出的答案,我尝试做同样的事情。

describe('params', function () {
var params;

beforeEach(module('params'));
beforeEach(inject(function (_params_) {
    params = _params_;
}));

it('Should ', function () {
    expect(params).to.be.a('Object');
 });

});

。但我有这个错误:

TypeError: undefined is not an object

这意味着参数未定义。我不知道为什么。我需要帮助来解决这个问题

【问题讨论】:

    标签: angularjs jasmine factory


    【解决方案1】:

    如果您使用 karma,请记住在加载测试时将所有依赖项 (Metronic) 包含在 karma.conf.js 文件中。

    【讨论】:

    • 感谢@pansay 的回答,但我找不到 Metronic 依赖项的任何 js 文件,这是解决我的问题的唯一可能解决方案吗?在这种情况下我不能使用 spyOn 吗?
    【解决方案2】:
    describe('params', function () {
        var params;
    
        beforeEach(module('params'));
        beforeEach(inject(function (_params_) {
            params = _params_;
        }));
    
        it('Should ', function () {
            expect(params).to.be.a('Object');
        });
    
    });
    

    【讨论】:

    • 非常感谢您的回答.. 我试试但是我的测试失败了,我收到了这个错误:ReferenceError: Can't find variable: Metronic
    • 我怎样才能避免这个错误?当我评论这 2 行(包含 Metronic)来查看结果时,我得到这个错误 TypeError: undefined is not an object (evalating 'expect(params).to .be')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多