私の要求に応じて、ホットキーのテスト仕様を書く必要があります(シフト+ 1 + L - アップロードファイル)。私の方法では、私のspecファイルで今すぐキーボードイベントのkeyCodeまたはキーまたはコードプロパティを定義する方法
public static SHIFTKEY : number = 16;
this.keys = {};
document.addEventListener('keydown', (event: KeyboardEvent) => {
var code = event.which ? event.which : event.keyCode;
if (code === KeyCodeConst.SHIFTKEY || (this.keys[KeyCodeConst.SHIFTKEY] && trackedKeys[code])) {
if (!this.keys[code]) {
this.keys[code] = true;
this.keysCount++;
}
if (this.keysCount === 3) {
alert('call the method which is required');
}
}
if (!trackedKeys[code]) {
this.keysCount = 0;
}
});
以下のようなもの、私はビルドを実行している間
describe('Add Event Listener',() => {
beforeEach(() => {
viewModel = new viewModel();
spyOn(window, 'addEventListener').and.callThrough();
});
it('check the combination of keys are called',() => {
keyPress(16);
keyPress(49);
keyPress(76);
expect(viewModel.keys[KeyCodeConst.SHIFTKEY]).toBeTruthy();
});
function keyPress(keyCodeVal) {
var keyboardEvent = document.createEvent('KeyboardEvent');
try {
Object.defineProperty(keyboardEvent, 'keyCode', {'value': keyCodeVal});
} catch (err){
console.log(err);
}
keyboardEvent.initKeyboardEvent('keydown',true,false,window,'',0,'',false,'');
document.body.dispatchEvent(keyboardEvent);
}
});
以下のように、このためのテストケースを記述しようとしています、私は以下のようなエラーを取得していますし、それが与えています以下のようなビルドエラー
Attempting to change value of a readonly property.
at defineProperty (--some url--)
at keyPress (--some url--)
keyCodeまたはwhichを除いて、メソッドに押されたキー値を送信できる方法はありますか? MDNガイドラインによると、これらは読み取り専用の属性であることがわかりました。キーを使用しようとしましたが機能しませんでした。
おかげ。テストするために、私はそれぞれの前に要素を作成する必要があるkeydownイベントをテストします。$( 'body')。append( "");これは私の目的には役に立たないでしょう – Krishna
'triggerKeyDown(document.body、11)'は動作します – DevDig
プロパティ 'KeyboardEvent'は 'Window'型に存在しません。私は存在しなかったライブラリをチェックした。 – Krishna