2017-05-04 32 views
0

我为我的应用程序运行了Jest/Flow安装程序。我们切换到了TypeScript,并且我的所有测试都打破了。我将所有内容转换为.ts和.test.ts并修复了所有错误。出于某种原因,我的__mocks__已不再使用。 (我不得不嘲笑一些模块失败的汽车模块)jest打字稿不使用__mocks__ for node_modules

例如,下面的代码用于模拟电子任何时候它是必需的,并允许代码调用模拟对话框,所以我可以检查错误案例报告错误。由于我转换为TypeScript,因此在测试中任何时候点击require ("electron"),它都会失败,说明remote是未定义的。

前)aFile.test.ts

import reportError from "../aFile.ts"; 
const { dialog } = require ("electron").remote; 

describe ("reportError",() => 
{ 
    test ("creates dialog",() => 
    { 
     const title = "foo"; 
     const message = "bar"; 
     reportError (title, message); 

     expect (dialog.showErrorBox).toHaveBeenLastCalledWith (title, message); 
    }); 
}); 

前)aFile.ts

const { dialog } = require ("electron").remote; 
export default function reportError (title: string, message: string) 
{ 
    dialog.showErrorBox (title, message); 
} 

前)__mocks__/electron.js(node_modules的兄弟姐妹)

module.exports = { remote: { dialog: { showErrorBox: jest.fn() } } };

我知道某些模拟不正在使用,因为SE当我以下内容添加到任何失败的.test.ts文件,它开始通过:

jest.mock ("electron",() => { return { remote: { dialog: { showErrorBox: jest.fn() } } } });

为什么不打字稿找到我__mocks__

+0

我的猜测是,'需要(“电子”)'正从开这个玩笑解析器掩盖,当笑话吊进口未检测。这可能需要深入挖掘笑话的来源。 –

+0

有同样的问题:( – Jonathan

+0

我能解决这个问题,我会后我的解决办法明天 – austinrulezd00d

回答

1

我用以下解决方法来解决这个问题:

创建mocks.js

jest.mock ("electron",() => 
    { 
    return { remote: { dialog: { showErrorBox: jest.fn() } } }; 
    }); 

中的package.json这增加了玩笑部分(路径到您的mocks.js是):

"jest": 
{ 
    "setupFiles": [ "<rootDir>/../mocks.js" ] 
}, 

这将全局模拟电子,以及您在此声明的任何其他模块,类似于具有__mocks__文件夹。您可以将每个模块放入其自己的文件并添加到setupFiles数组中。