为什么我的测试失败并且lodash方法中的console.log()语句没有记录?

时间:2014-06-03 02:50:49

标签: javascript angularjs jasmine karma-runner lodash

我有一些失败的测试在各种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'
      });
  });
});

2 个答案:

答案 0 :(得分:1)

我不确定为什么你的日志在Karma运行时没有显示 - 当我测试你的代码时它们会为我做。可能还有一个问题对你或我来说并不明显。

我可以说您对_.omit的使用不正确。来自the docs

  

回调绑定到thisArg并使用三个参数调用;   (值,键,对象)。

同时,您的回调参数如下所示:

function(key, val) { .. }

这个小调整使我的测试通过:

function(val) { .. }

答案 1 :(得分:1)

事实证明问题是不正确的lodash引用。 karma.config文件引用的是与应用程序(lodash.underscore.js)不同的版本(lodash.compat.js)。协作开发不一致的一个简单问题。