Angularjs Angular/Karma/Jasmine-未定义不是对象(正在评估';commLogger.SetLogLevel';)
我试图学习Karma和Jasmine单元测试,但我现在遇到了一个错误。我试图研究这个网站上的所有答案,但没有找到答案 下面是我的单元测试文件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
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
,以查看错误。