Javascript 整合玩笑和重新布线

Javascript 整合玩笑和重新布线,javascript,node.js,gulp,jestjs,Javascript,Node.js,Gulp,Jestjs,致力于让项目从Mocha过渡到Jest,以利用运行测试的速度以及Jest框架本身和遇到问题的速度。在代码库中使用得相当广泛,我在运行gulpjest任务时遇到了一个问题,并且只针对那些使用rewre的文件。我假设这与模块加载或不加载有关,但我被难住了。这是一个非常简单的吞咽任务,没什么大不了的。我已经在代码库上运行了大量的codemod,并且通过了许多测试,只是没有使用rewre的测试 gulp.task('jest', function() { process.env.NODE_ENV

致力于让项目从Mocha过渡到Jest,以利用运行测试的速度以及Jest框架本身和遇到问题的速度。在代码库中使用得相当广泛,我在运行gulpjest任务时遇到了一个问题,并且只针对那些使用rewre的文件。我假设这与模块加载或不加载有关,但我被难住了。这是一个非常简单的吞咽任务,没什么大不了的。我已经在代码库上运行了大量的codemod,并且通过了许多测试,只是没有使用rewre的测试

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);
});
使用节点6.X,jest 20.X


提前谢谢

Jest有自己的模仿导入机制,称为

你需要切换到使用它,而不是重新布线

范例

// 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.

让我吃惊的是,Proxyquire与jest不兼容。要模拟依赖项,您需要利用模拟库,如


请看一看这篇文章,了解如何成功地模拟依赖包。

是的,我理解这一点,但有什么办法可以解决吗?我们非常频繁地使用rewire,并且必须使用jest的模拟工具重新编写代码,这是非常重要的。想知道我是否可以动态地进行锁定并绕过Jest?*我相信现在是
取消锁定
了,也许你可以使用monkey patch
重新布线
,编写你自己的“重新布线”函数,在内部使用Jest.mock。把它放在jest.setup文件中,有趣的是,类似的东西似乎可以工作。我希望我不必求助于这样的东西,但这比重写1000个测试要省力:)第二个选择是使用codemod,类似的东西,或者写一个:]从中汲取灵感
// 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.