2017-08-26 113 views
0

正在努力让项目从Mocha过渡到Jest,以利用运行测试的速度以及Jest框架本身的速度,并且遇到问题。 Rewire在代码库中使用相当广泛,我在运行gulp-jest任务时遇到问题,对于那些使用rewire的文件,只有只有。我认为它与模块加载或不加载有关,但我很难过。这是真正的骨头吞咽任务,没有太多的东西。我已经在代码库上运行了一个广泛的代码模式,许多测试都通过了,而不是那些使用rewire的测试。集成Jest和Rewire

gulp.task('jest', function() { 
    process.env.NODE_ENV = 'test'; 
    return gulp.src('name/path').pipe(
     jest({ 
      preprocessorIgnorePatterns: ['<rootDir>/node_modules/'], 
      automock: false, 
      resetModules: true, 
      setupFiles: ['./jestsetup.js'] 
     }) 
    ); 
}); 

gulp.task('newtest', function(callback) { 
    runSequence('env', 'jest', callback); 
}); 

任何时候rewire相关的文件运行,他们抱怨文件没有被发现。我在这里错过了什么吗?我确定模块本身具有为require设置的正确路径。

下面是开玩笑实际的错误/重新连接:

FAIL path/to/folder/file/app.test.js 
    ● Test suite failed to run 

    Cannot find module '../../../../path/to/folder/file/app' 

     at Function.Module._resolveFilename (module.js:469:15) 
     at internalRewire (node_modules/rewire/lib/rewire.js:23:25) 
     at rewire (node_modules/rewire/lib/index.js:11:12) 
     at Object.<anonymous (path/to/folder/file/app.test.js:10:14) 
     at process._tickCallback (internal/process/next_tick.js:109:7) 

使用节点6.X,开玩笑20.x

提前感谢!

回答

0

Jest有它自己的嘲笑导入的机制,它叫做jest.mock

您将需要切换到使用,而不是退休。

// banana.js 
module.exports =() => 'banana'; 

// __tests__/test.js 
jest.mock('../banana'); 

const banana = require('../banana'); // banana will be explicitly mocked. 

banana(); // will return 'undefined' because the function is auto-mocked. 

例子来自here

+1

权而采取的,我明白,但有周围没有任何办法吗?我们严重地使用重新连线,并且使用jest的嘲讽工具重新编写文件并不重要。想知道如果我可以动态dontMock的东西,绕过JEST? – markthethomas

+0

*我相信现在是'unmock' – markthethomas

+0

也许你可以使用'rewire'的猴子补丁,编写你自己的“rewire”函数,在内部它将使用jest.mock。 把它放在jest.setup文件https://jest-bot.github.io/jest/docs/configuration.html#setuptestframeworkscriptfilefile-string – felixmosh