【问题标题】:jest mock implementation is not working with require('')开玩笑的模拟实现不适用于 require('')
【发布时间】:2018-06-04 07:03:27
【问题描述】:

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

这里是代码

//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
  });

});

【问题讨论】:

    标签: javascript jestjs


    【解决方案1】:

    您的要求顺序错误。如果在设置模拟 reference 之前需要 ./foo,则 foos reference 将根据 Jest 自动模拟未定义。

    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                                                                                                                                                                                                
        });                                                                                                                                                                                                                                      
    }); 
    

    【讨论】:

      【解决方案2】:

      线

      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
        });
      
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多