Reduxアプリケーションのサードパーティノードモジュールから関数を嘲笑するのに問題があります。Reduxミドルウェア(Jest)のノードモジュールをモックする
特定のアクションをインターセプトし、サードパーティのnpmパッケージから関数を呼び出すミドルウェア関数をテストしようとしています。 (モジュールは、AWS-IOTデバイス-SDKであり、関数はAWSのIoTサービスへのWebSocket接続を確立)
import awsIot from 'aws-iot-device-sdk'
// ...
const customMW = (store => {
let websocket = null
return next => action => {
switch(action.type) {
case 'CONNECT':
websocket = awsIot.device({
accessKeyId: action.accessKey
// other params...
})
// Listen to events etc.
break
// ...
}
}
})
awsIot.device()
はWebSocketの接続を確立し、それが正常に動作します。
私はcustomMW
機能をテストしようとすると、しかし、awsIot.device()
は(店舗と次適切に嘲笑されている)、私はそれを嘲笑しようとしていていても呼び出されます。
test.js
describe('middleware test',() => {
it('does something',() => {
awsIot.device = jest.fn()
action = { type: 'CONNECT' }
customMW(store)(next)(action)
// assertions...
})
})
私がテストを実行すると、私が手'accessKey'が定義されていないというエラーです。したがって、ミドルウェアは、アクションの一部として渡される 'accessKey'を探している元のawsIot.device()
関数を実行しています。
私はこのパターンを他の場所で成功させました。誰もがこの機能が嘲笑されていない理由を知っていますか?
私はまだ同じエラーが発生します。冗談が私の嘲笑された機能を完全に無視しているようだ。 –
コンポーネントに 'awsIot'を記録して、それが侮られていないかどうかを調べることができますか? –
はい、それはとても奇妙です。実際に私があなたの提案を拡張し、 '.device'に擬似実装を追加すると、元のファイルに正しく返されていることがわかります。しかし何らかの理由で、まったく同じ関数を呼び出す次の行がこれを無視しているように見えます... –