Xia*_*ong 11 javascript jestjs
我想测试一个使用一个第三个lib来获取数据的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
  });
});
Run Code Online (Sandbox Code Playgroud)
    您的要求顺序是错误的。当你需要./foo设置你的模拟前,reference然后foo小号reference将不确定按玩笑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                                                                                                                                                                                                
    });                                                                                                                                                                                                                                      
}); 
Run Code Online (Sandbox Code Playgroud)
        线
var foo = require('./foo');
在中进行评估describe并存储在中foo。
然后,在该代码it块中,您要对此进行模拟,但这不适用于旧的reference foo。
把foo后mockImplementation调用将修复错误。
//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
  });
});
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           13113 次  |  
        
|   最近记录:  |