开玩笑的模拟实现不适用于 require('')

jest mock implementation is not working with require('')

我想测试一个使用第 3 个库获取数据的 JS,所以我使用 jest mock 该实现。当我在测试中直接调用它时它正在工作。但是,在源代码中使用时,它不起作用。

这是代码

//Source implementation

var reference = require('./reference');

module.exports = {
  getResult: function() {
    return reference.result();
  }
};


//Test code

jest.dontMock('./foo');
jest.dontMock('console');

describe('descirbe', function() {
  var foo = require('./foo');

  it('should ', function() {
    var reference = require('./reference');

    reference.result.mockImplementation(function (a, b, c) {
      return '123'
    });

    console.log(foo.getResult()); // undefined
    console.log(reference.result()); // 123
  });

});

您的需求顺序有误。当您在设置模拟 reference 之前需要 ./foo 时,foos reference 将根据 Jest automocking 未定义。

jest.dontMock('./foo');                                                                                                                                                                                                                

describe('describe', function() {                                                                                                                                                                                                          
    it('should ', function () {                                                                                                                                                                                                            
        var reference = require('./reference');                                                                                                                                                                                               
        reference.result.mockImplementation(function (a, b, c) {
            return '123';
        });                                                                                                                                                                                               
        var foo = require('./foo');                                                                                                                                                                                                        

       console.log('ferr', foo.getResult());  // ferr 123                                                                                                                                                                                                
    });                                                                                                                                                                                                                                      
}); 

var foo = require('./foo');

describe 中计算并存储在 foo 中。

之后,在 it 块中,您正在模拟它,但这不适用于旧参考 foo

mockImplementation 调用之后放置 foo 将修复错误。

//Test code

jest.dontMock('./foo');
jest.dontMock('console');


describe('describe', function() {

  it('should ', function() {
    var reference = require('./reference');

    reference.result.mockImplementation(function (a, b, c) {
      return '123'
    });
    var foo = require('./foo');

    console.log(foo.getResult()); // undefined
    console.log(reference.result()); // 123
  });

});