javascript - Jest 模拟实现不适用于 require ('' )

标签 javascript jestjs

我想测试一个使用第 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 未定义自动模拟。

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

关于javascript - Jest 模拟实现不适用于 require ('' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32431059/

相关文章:

javascript - jasmine running 和 waitsFor 实际上做了什么?

javascript - 如何正确使用 indexOf() 处理多个元素?

jestjs - 将自定义参数传递给 jest

javascript - 使用angularjs在 View 页面中拆分冒号

javascript - 有没有办法让 HTML5 数据列表使用模糊搜索?

node.js - 如何在 NestJS 中模拟存储库、服务和 Controller (Typeorm 和 Jest)

reactjs - 如何对 Next.js 动态组件进行单元测试?

javascript - 如何使用 Jest/React 测试 Router.push

javascript - 如何从 JavaScript 更改密码字段的文本?

javascript - 如果从另一个模块调用该模块,为什么改变模块会更新引用,但如果从自身调用则不会?