2017-05-10 17 views
0

Reduxアプリケーション用のカスタムSentryミドルウェアをユニットテストしています。選択したテストフレームワークはJestです。私はどの方法でもwindow.Ravenをモックする方法を試してみましたが、うまく動作しません。ウィンドウを模擬する方法。Jestを使用しているウイルス

window.Raven = { 
    isSetup: jest.fn(() => false) 
} 
... 
expect(Raven.isSetup).toHaveBeenCalled() 

私は何が欠けていますか?代わりにjest.setMock('raven-js')を使用する必要がありますか?

+0

を私はレイヴンのためのReduxのミドルウェアを維持:[レイヴン-ため-再来](https://github.com/captbaritone/raven-for-redux)多分それは助けることができます。ユースケースに対処できない場合は、解決しようとしている問題について知りたいのです。たぶんあなたはGitHubページに問題を提出することができます。 –

答えて

0

あなたはこのようなインポートされたモジュールを模擬する必要があります。

import Raven from 'raven-js' 
jest.mock('raven-js',()=> ({ 
    isSetup: jest.fn(() => false) 
})) 

it('should call raven',()=> { 
    //run you code 
    expect(Raven.isSetup).toHaveBeenCalled() 
}) 
+0

これはbeforeEachブロックで動作し、beforeEachブロックの値をログアウトしてコンソールが正常に嘲笑したが、コードImをテストするテストを実行すると、 'raven-js'がインポートされ、isSetupが実際のレイヴンのインスタンス...それはモックを書く上ですか?私は輸入品を模倣する必要がありますか? – hally9k

+0

あなたは 'raven-js''から' import raven 'を使ってそれをインポートしますか? –

+0

コードImのテストでは 'raven-jsから' Ravenをインポートします。そのコードをテストにインポートします。 – hally9k

0

それは多分冗談20で、この、APIの変更であることをなってしまった...

jest.mock('raven-js',() => { 
    return { isSetup: jest.fn(() => false) } 
}) 
1

私はraven-for-reduxを維持していますおそらくRavenのミドルウェアやReduxなどがあります。これにはJestテストスイートが含まれているため、同様の問題を解決しなければなりませんでした。 Ravenを模擬するのではなく、Raven.setTransport()を使用してカスタム輸送を指定することにしました。これは私のテストでネットワークコールを避けることができましたが、Ravenがやろうとしていたことを正確にテストしています。

あなたがここに全体のテストを見つけることができます:https://github.com/captbaritone/raven-for-redux/blob/master/index.test.js

関連する問題