Angularjs Angular/Karma/Jasmine-未定义不是对象(正在评估';commLogger.SetLogLevel';)

Angularjs Angular/Karma/Jasmine-未定义不是对象(正在评估';commLogger.SetLogLevel';),angularjs,jasmine,karma-runner,Angularjs,Jasmine,Karma Runner,我试图学习Karma和Jasmine单元测试,但我现在遇到了一个错误。我试图研究这个网站上的所有答案,但没有找到答案 下面是我的单元测试文件 describe('CommLogger', function() { var commLogger; beforeEach(module('FileLoggerManager')); beforeEach(inject(function (CommLogger) { commLogger = CommLogge

我试图学习Karma和Jasmine单元测试,但我现在遇到了一个错误。我试图研究这个网站上的所有答案,但没有找到答案

下面是我的单元测试文件

describe('CommLogger', function() {
    var commLogger;

    beforeEach(module('FileLoggerManager'));

    beforeEach(inject(function (CommLogger) {
        commLogger = CommLogger;
    }));

    describe('SetLogLevel', function() {
       it('SetLogLevel Spec', function () {
            var logLevel = 0;
            commLogger.SetLogLevel(logLevel);
            expect(commLogger.SetLogLevel).toHaveBeenCalledWith(logLevel);
       });
    });
});
这是我想要进行单元测试的js文件

(function() {
    'use strict';
    angular
        .module('FileLoggerManager')
        .service('CommLogger', Body);

        function Body(LocalData, $q, $timeout) {
            var service = {
                writeLog: writeLog,
                SetFilePath: SetFilePath,
                SetMaxLogSize: SetMaxLogSize,
                DeleteLogFiles: DeleteLogFiles
            };

            var maxloglevel = 2;

            function SetLogLevel (logLevel) {
                console.log("Comm Logger: Set log level to " + logLevel);
                maxloglevel = logLevel;
            }

            return service;
        }
})();   

我将非常感谢任何帮助。提前谢谢

我认为问题在于您的
CommLogger
服务没有公开
SetLogLevel
功能。请尝试在此处添加:

var service = {
  ...
  SetLogLevel: SetLogLevel
};
此外,如果您想使用
来调用
,则需要监视该函数:

describe('SetLogLevel', function() {
  it('SetLogLevel Spec', function () {
    spyOn(commLogger, 'SetLogLevel').and.callThrough();
    var logLevel = 0;
    commLogger.SetLogLevel(logLevel);
    expect(commLogger.SetLogLevel).toHaveBeenCalledWith(logLevel);
  });
});

有关的详细信息,请参见。

当运行
inject
时,您出现引导错误,因此未分配变量。应该有错误,但如果没有,这可能是因为Phantomjs以吞咽错误而闻名。尝试切换到Chrome或将所有内容从
beforeach
移动到
it
,以查看错误。