2017-08-10 13 views
0

私はJestを使ってgraphqlのエンドポイントをテストしています。基本的に私はリゾルバから返された結果を評価しています。しかし、この場合、関数が特定のパラメータでリゾルバ内で呼び出されたかどうかをテストしたい。コードは、私がsendLib()dataパラメータで呼び出されることを確認したいJestという関数が呼び出されました

import { sendLib } from '../lib' 

export default { 
    send: async (input) => { 
    const data = { 
     foo: 1, 
     bar: 2, 
     ...input 
    } 
    await sendLib(data) 
    return { input } 
    } 
} 

のようなものです。最も重要なことは、dataに正しい値があるかどうかをテストする必要があることです。私はJestの.toHaveBeenCalledWith()を読んでいましたが、私のケースにどのように適合しているのか分かりません。

sendLib()を実行せずにそのテストを行う方法はありますか?この関数はHTTPリクエストを呼び出すため、テスト時にそれを行う時間を無駄にしたくはありません。

答えて

0

あなたは実際の関数の実装を呼び出したり、http要求を実行したりしないように、テスト用のjest.fnでlibをモックする必要があります。代わりにモック関数を呼び出します。そしてあなたはそれが以下で呼ばれていたものを主張することができ、私は背が高いんだもののラフな一例である

// filetotest.js 
 
import { sendLib } from '../lib' 
 

 
export default { 
 
    send: async (input) => { 
 
    const data = { 
 
     foo: 1, 
 
     bar: 2, 
 
     ...input 
 
    } 
 
    await sendLib(data) 
 
    return { input } 
 
    } 
 
} 
 

 
//__tests__/filetotest.test.js 
 

 
import { sendLib } from '../../lib' 
 
import defaultImport from '../filetotest.js' 
 
jest.mock('../../lib/',() => { 
 
    return { 
 
    sendLib: jest.fn() 
 
    } 
 
}) 
 

 
test('call with correct data', async() => { 
 
    // call the function you are suppose to to test 
 
    await defaultImport() 
 
    // sendLib is a mockFn as jest.mock calls are hoisted 
 
    expect(SendLib).toHaveBeenCalledWith({data: ''}) 
 
})

関連する問題