私はEmberにとって新しく、ページャーコンポーネントをテストしようとしています。簡体コンポーネントは次のようになります。Emberコンポーネントテスト - 外部アクションを呼び出さない場合のユニットテストコンポーネントのアクション
export default Ember.Component.extend({
index: 0,
actions: {
next() {
this.incrementProperty('index');
}
}
});
私は予想通り次の()アクションが実際にインデックスプロパティをインクリメントないことをテストしようとしています。私はこのようなユニットテストを書いた:
test('next should increment the index by 1', function (assert) {
const component = this.subject();
assert.equal(component.get('index'), 0, 'Index should be 0');
component.get('actions').next();
assert.equal(component.get('index'), 1, 'index should be 1');
});
しかし、それは「this.incrementPropertyは関数ではありません」というエラーで失敗します。デバッグでは、next()関数の中でテスト中の "this"はコンポーネントのコンテキストではなく、next()を唯一のプロパティとして持つオブジェクトです。
これは、テストでnextPlaceアクションを呼び出す方法が原因であると思います。私は、このアクションを発生させるボタンをクリックし、UIを比較して変更を確認する統合テストを書くことができると知っていますが、テストしようとしているのは、関数自体が期待どおりに機能することです。このコンポーネント(クロージャアクション)に渡されたアクションであれば、統合テストでダミー関数を設定し、それをコンポーネントに渡して、それがどのように応答するかを確認できます。しかし、このアクションはそれに引き継がれたアクションを呼び出さない。
私がテストしている機能は本当に基本的なものだが、部分的には、外部(コンポーネント)アクションを呼び出さないコンポーネントでアクションをテストする方法を理解することです。