まず、このコードを動作させるためにほとんどすべてを試してきましたが、達成しました、問題は私がアプローチが気に入らず、テストコードをより読みやすく、機能的にするためにできることがあれば、もっと良いことがあるかどうかを知ってください。テストされた関数で返されない呼び出された約束をテストする方法
は、私は2番目の関数(secondApiCall
)がと呼ばれてきたこと(例えばsinon
付き)を主張したいのですが、それを実現するために方法がないように思える、どのようにそれを実現するでしょう。それは非ハッキーなアプローチですか?
ここでの主な問題は、「私はfunctionToTest
を変更できません」ということです。基本的にはAPI呼び出しが行われているかどうかを確認するテストを作成する必要があります。
functionToTest
が終了した後、どのようにしてアサーションを実行しますか?
PS:コードはたわごとですが、私は知っているが、時にはあなたはちょうどあなたがより多くの感謝はちょうどそれをリファクタリングする前にそれのたわごとをテストすることができない、それに対処する必要がある:(
const firstApiCall =() => {
return new Promise(function(resolve,reject) {
setTimeout(() => {
resolve('firstApiCall success');
}, 3);
});
};
const secondApiCall =() => {
return new Promise(function(resolve,reject) {
setTimeout(() => {
resolve('secondApiCall success');
}, 3);
});
};
const functionToTest =() => {
setTimeout(() => {
firstApiCall().then(result => {
setTimeout(() => {
secondApiCall()
}, 2)
})
}, 15)
};
最後に、あなたが同期コード
const firstApiCall =() => {
return {
then: (cb) => {
cb('firstApiCall success')
}
}
};
を持っているので、基本的にはモックを生成するコードは、このような何かをありがとうございました!
functionToTestが終了した後に ''どのように与えられたコードを使用すると、アサーションを実行します - ?あなたがすることができません 'functionToTest'はどちらも何も返さない、またそれが終了したとき、それは何かをコールバックしないので...それはあまり書かれていない非同期関数です –
@ JaromandaX私はあなたに完全に同意します、私は非常に良いコードのATMを扱っていますが、どういうわけか、誰かがそれを維持しなければなりません:(そして、問題は "あなたは振る舞いの変化がないことを確認することができます」テストでのみ行うことができます(テストが醜く不可能に近い場合でも) –
コードを変更せずにこれをテストすることはできません。良い答えではありませんが、唯一の正当なものです.APIコールがステートフルな変更に影響する場合、変更が約束のループに反映されているかどうかを調べることができます。ミリ秒。それはどちらかというと素晴らしいことではないが、あなたは立ち往生している。 –