2017-04-05 90 views
0

我無法模擬簡單的依賴項生成器函數。jest mock依賴項生成器函數

//generatorFunction.js 
export default()=>({execute: (arg1)=>Promise.resolve(arg1)}) 

//actualFunction.js 
import generate from 'generatorFunction' 
export default (arg1)=>generate(arg1) 

//actualFunction.test.js 
import actualFunction from './actualFunction' 
import generatorFunction from './generatorFunction' 
const resultingGeneratedFunction = generatorFunction(); 

jest.mock('generatorFunction',()=>jest.fn(()=>({execute:()=>Promise.resolve()}))) 
it('calls generateFunction', function(done){ 
    actualFunction(1).then(()=>{ 
    expect(resultingGeneratedFunction.execute).toHaveBeenCalledOnce() 
    done() 
    }) 
}) 

哪些錯誤作爲執行永遠不會被調用,儘管當我在控制檯的日誌裏面看到actualFunction被執行時被調用。

回答

0

問題是,笑話不知道你在測試中的某個地方使用承諾。您要麼退還您使用async/await的承諾。看看docs

import actualFunction from './actualFunction' 
import generate from 'generatorFunction' 

jest.mock('generatorFunction',()=>jest.fn(()=>({execute:()=>Promise.resolve()}))) 
it('calls generateFunction', function(){ 
    return actualFunction(1).then(()=>{ 
    expect(generateFunction.execute).toHaveBeenCalledOnce() 
    }) 
}) 

import actualFunction from './actualFunction' 
import generate from 'generatorFunction' 

jest.mock('generatorFunction',()=>jest.fn(()=>({execute:()=>Promise.resolve()}))) 
it('calls generateFunction', async function(){ 
    const value = await actualFunction(1) 
    expect(generateFunction.execute).toHaveBeenCalledOnce() 
}) 
+0

我沒有意識到你不得不退還承諾,但這仍然沒有意義。您提供的示例中哪裏會生成功能?我意識到我沒有提供這個問題的背景,並且現在添加了它 – l2silver

+0

對不起,您還必須導入它們。導入的版本是模擬的,你可以測試它。更新了我的答案。 –

+0

對不起,生成器函數的問題是它必須生成一個自己的實例,我認爲這是混淆的地方。如果你正在導入。如果仔細查看示例,導入的generatorFunction將創建generateFunction。我真的應該更清楚我的問題,現在我會改變它 – l2silver