UI イベントのシーケンスをトリガーする角度のある e2e テストをどのように書いているのでしょうか? シナリオの非同期性により、それが難しくなっているようです。
詳細: 特殊なフォームの編集を高速化するために多くのキー処理を行うアプリのテストを作成しています。シナリオの DSL (以下を参照) にキーボード拡張機能をまとめましたが、テストの最初のキー イベントだけが効果があります。すなわち
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down
expect(element('*:focus').text()).toEqual('00:04');
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down
expect(element('*:focus').text()).toEqual(''); // but equals 00:04
2 番目の keydown は、キーをルーティングする *:focus が見つからないため、何もしません (画面にはありますが)。紛らわしい。
angular.scenario.dsl('keyboard', function() {
var chain = {};
chain.keydown = function(selector, keyEvent, keyCode, shift, ctrl) {
return this.addFutureAction("keyEvent", function($window, $document, done) {
var jQuery = $window.$;
var e = jQuery.Event(keyEvent);
e.keyCode = keyCode; // # Some key code value
e.altKey = false;
e.ctrlKey = ctrl;
e.shiftKey = shift;
if (selector == null) selector = '*:focus';
var j = jQuery(selector);
if (j == null) j = jQuery('body');
j.trigger(e);
done();
});
};
return function() {
return chain;
};
});