【发布时间】:2014-06-03 02:50:48
【问题描述】:
我有一些失败的测试在各种 lodash 方法上都被打破,但在浏览器中工作正常。在尝试调试时,我在回调参数中添加了一些 console.log()s 以查看发生了什么,但它们没有出现在测试中。在浏览器中运行的相同代码都可以正常工作并写入控制台。我怀疑破坏功能与丢失的日志语句有关。
这是一个 Angular 应用程序,我在其中提供 lodash 作为服务。
应用
app.value('_', window._);
app.service('myService', function(_) {
return {
filterNulls: function(obj) {
// This logs correctly everywhere
console.log(obj);
return _.omit(obj, function(val, key) {
// This logs in browsers but not in the Jasmine/Karma environment
console.log('test');
return val === null;
});
}
};
});
测试
describe('myService', function() {
beforeEach(function() {
module(function($provide) {
$provide.value('_', window._);
});
});
it('should strip nulls', inject(function(myService) {
// FAILS because null value is not removed
expect(myService.filterNulls({
key: 'key1',
someProp: 'bar',
someOtherProp: null
}))
.toEqual({
key: 'key1',
someProp: 'bar'
});
});
});
【问题讨论】:
-
在你的 karma conf 文件中是否包含 lodash 来加载?
-
另外,从测试中,您调用
stripNulls而在服务中只有一个名为filterNulls的函数,它返回三个值,而不是两个,给定您从测试。 -
是的 Lodash 包括在内,这是为了简洁起见,这里是复制代码的错字。我试图澄清测试失败是因为空值没有被剥离。没有参考错误、未定义的函数等。我向您保证设置和语法是正确的。
-
抱歉,来晚了,我错过了你的意思。
标签: javascript angularjs jasmine karma-runner lodash