コントローラの一部である2つの別々の関数を呼び出すEmberコントローラで定義されたアクションが1つあります。私は、アクションメソッドが正しい関数を呼び出したかどうかを確認するために、ユニットテストでそれらの関数を模擬したいと思います。エムバーコントローラをユニットテストする方法
私のコントローラは次のようになります。実際には
export default Ember.Controller.extend({
functionA() {
return;
},
functionB() {
return;
},
actions: {
actionMethod(param) {
if(param) {
return this.functionA();
}
else {
return this.functionB();
}
}
}
});
、コントローラの作品は、しかし、ユニットテストでは、関数Aおよび関数Bは両方とも未定義です。私はthis
をコンソールに記録しようとしましたが、functionAとfunctionBがどこにあるのかを見つけることができませんでしたので、正しくモックすることができません。私はそれらが行動の隣にあるオブジェクトの最上位レベルにあると期待しましたが、代わりに_actions
が見つかり、actionMethod
が正しく定義されていました。
私のユニットテストは次のようになります
以下const functionA = function() { return; }
const functionB = function() { return; }
test('it can do something', function(assert) {
let controller = this.subject();
// I don't want the real functions to run
controller.set('functionA', functionA);
controller.set('functionB', functionB);
controller.send('actionMethod', '');
// raises TypeError: this.functionA is not a function
// this doesn't work etiher
// controller.functionB = functionB;
// controller.functionA = functionA;
// controller.actions.actionMethod();
}
は、誰もが、私はテスト環境でこれらの機能を置き換えることができる方法上の任意のアイデアを持っていますか?または、おそらく、この機能をテストするか、コントローラをセットアップするより良い方法がありますか?
- 編集 タイプミス:this.subject this.subjectする()
サイドノート:1.コントローラオブジェクトを作成するには、 'this.subject()'を呼び出す必要があります。 2. 'controller.send'メソッドは、呼び出し元に値を返しません – kumkanillam
Whoops typo - 私は' this.subject() 'を呼び出しました。 'controller.send'に関しては、上記のように' controller.actions.actionMethod() 'を呼び出すようにしました。 – user2989731