contentEditable
入力メソッドとして使用するコンポーネントがあります。関心のあるコンポーネントの部分は次のとおりです。
<div className="enter-edit-mode" onClick={view.enterEditMode}>
<div className="user-input" ref="content" contentEditable onInput={view.textChanged}></div>
</div>
コンポーネントは正常に動作します -textChanged
ユーザー入力でメソッドに入ります。メソッドは次のようになります。
textChanged: function (e) {
var view = this,
textValue = e.target.innerHTML;
view.setState({
enteringText: textValue.length,
temporaryValue: textValue
});
}
入力動作をテストしようとすると、直面している問題が発生します。セットアップは酵素、チャイ、シノンで行います。renderComponent
酵素のmount
メソッドを使用して、単純な関数を使用してコンポーネントをレンダリングしています。
beforeEach(function () {
view = renderComponent(card);
viewReact = view.get(0);
});
it('should enter text changed method on input', function () {
let spy = sinon.spy(viewReact, 'textChanged');
view.find('.user-input').simulate('input');
expect(spy).to.have.been.called;
spy.restore();
});
期待される textChanged が少なくとも 1 回呼び出されたことが出力されますが、呼び出されたことはありません。ただし、奇妙な部分console.log
は、コンポーネントのメソッド内に a を配置すると、そこに到達することです。
私がそれを機能させるために試したこと
sinon.stub
の代わりに使用spy
してください。メソッドの何かが正しく機能しない可能性があるためです。view.find('.user-input').simulate('input', {target: {value: "lorem"})
またはで呼び出す.simulate('input', {key: 'a'})
入力をシミュレートする代わりに を実行するviewReact.textChanged()
と、明らかに機能します。
これを引き起こしているのは contentEditable の入力メソッドだと思います。助言がありますか?onInput
メソッドにテキストを正しく入力するにはどうすればよいですか? (textChanged
メソッドに入っても本文は空)