jest模拟实现不适用于require('')

时间:2015-09-07 04:20:43

标签: 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
  });

});

2 个答案:

答案 0 :(得分:4)

您的要求顺序错误。如果您在设置模拟./foo之前需要reference,那么根据Jest自动锁定,foo reference将被取消定义。

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

答案 1 :(得分:4)

该行

def pretty_print(dict): with open('example.txt', 'w') as out_file: for (key, value) in sorted(dict.items()): out_file.write('%s %s\n' % (key, value)) h = { 'a': 1, 'b': 2 } pretty_print(h)

var foo = require('./foo');中进行评估,并存储在describe

之后,在foo区块中,您将其嘲笑,但这并不适用于旧参考it

foo调用之后放置foo将解决错误。

mockImplementation