我有一些失败的测试在各种lodash方法中打破但在浏览器中正常工作。在尝试调试时,我在回调参数中投入了一些console.log()
来查看发生了什么,但它们没有出现在测试中。在浏览器中运行的相同代码都可以正常工作并写入控制台。我怀疑破解功能与缺少的日志语句有关。
这是一个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'
});
});
});
答案 0 :(得分:1)
我不确定为什么你的日志在Karma运行时没有显示 - 当我测试你的代码时它们会为我做。可能还有一个问题对你或我来说并不明显。
我可以说您对_.omit
的使用不正确。来自the docs:
回调绑定到thisArg并使用三个参数调用; (值,键,对象)。
同时,您的回调参数如下所示:
function(key, val) { .. }
这个小调整使我的测试通过:
function(val) { .. }
答案 1 :(得分:1)
事实证明问题是不正确的lodash引用。 karma.config
文件引用的是与应用程序(lodash.underscore.js
)不同的版本(lodash.compat.js
)。协作开发不一致的一个简单问题。