2017-05-04 33 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數組中。