Angular/Karma/Jasmine - undefined 不是一个对象(评估 'commLogger.SetLogLevel')
Angular/Karma/Jasmine - undefined is not an object (evaluating 'commLogger.SetLogLevel')
我正在尝试学习 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
};
此外,如果您想使用 toHaveBeenCalledWith
,您需要监视函数:
describe('SetLogLevel', function() {
it('SetLogLevel Spec', function () {
spyOn(commLogger, 'SetLogLevel').and.callThrough();
var logLevel = 0;
commLogger.SetLogLevel(logLevel);
expect(commLogger.SetLogLevel).toHaveBeenCalledWith(logLevel);
});
});
查看有关 jasmine spies 的更多信息。
我正在尝试学习 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
};
此外,如果您想使用 toHaveBeenCalledWith
,您需要监视函数:
describe('SetLogLevel', function() {
it('SetLogLevel Spec', function () {
spyOn(commLogger, 'SetLogLevel').and.callThrough();
var logLevel = 0;
commLogger.SetLogLevel(logLevel);
expect(commLogger.SetLogLevel).toHaveBeenCalledWith(logLevel);
});
});
查看有关 jasmine spies 的更多信息。