Jasmine 我是否需要在Jest测试中模拟所需的模块

Jasmine 我是否需要在Jest测试中模拟所需的模块,jasmine,reactjs,jestjs,Jasmine,Reactjs,Jestjs,我有一个要测试的mixin/Utils.js,其中下划线是必需的,并在模块中使用。比如: var _ = require('underscore'); var Utils = { foo: function(arrayOfArray) { return _.sortBy(arrayOfArray, function(array) { return -1 * array[1].length; }) || {}; } }; module.expor

我有一个要测试的
mixin/Utils.js
,其中
下划线是必需的,并在模块中使用。比如:

var _ = require('underscore');
var Utils = {

   foo: function(arrayOfArray) {
    return _.sortBy(arrayOfArray, function(array) {

      return -1 * array[1].length;

    }) || {};


   }

};
module.exports = Utils;
当我试图用玩笑来测试它时,我做了如下的事情。但测试失败了。我有一种感觉,那是因为我没有嘲笑下划线。但我该怎么嘲笑呢?通常,如果模块具有类似于
下划线
的依赖项,我应该如何正确设置模拟并测试模块

 var __path__ = "PATH_TO/mixins/Utils.js";


 jest.dontMock(__path__);



 describe("Test for mixins/Utils.js", function() {

    var Utils;

    beforeEach(function() {
    Utils = require(__path__);
});

   describe("countInversion", function() {

    it('Passing in [[0, [1,2]], [1, [1,2,3]]] and should get [[1, [1,2,3]]],[0, [1,2]] ', function()        {
        var testInput = [[0, [1,2]], [1, [1,2,3]]];
        var expectedOutput = [[1, [1,2,3]]],[0, [1,2]]; 
        expect(Utils.FOO(testInput)).toEqual(expectedOutput);
    }); 
});

}))

默认情况下,Jest会模拟所有内容,所以如果单元测试依赖于下划线中的功能,实际上不希望模拟下划线。您应该将
jest.dontMock('下划线')
添加到测试中,或者将其包含在jest配置的
unmackedModulePathPathPatterns
属性中,以获得预期的输出

编辑
正如@pgericson在评论中指出的,开玩笑。可以用来代替自动模拟。

从jest 15.0.0版开始,它不会自动模拟任何模块。