web-dev-qa-db-ja.com

TypeError:オブジェクト '#<Object>' React / JESTの読み取り専用プロパティ 'x'に割り当てることができません

私が反応コンポーネントのテストケースを書いている間、私は得ています

TypeError:オブジェクト '#'の読み取り専用プロパティ 'x'に割り当てることはできません

ここで、アプリケーションの実行中は、同様のエラーはスローされません。

そのコードはかなり基本的です

this.props.defaultForm = true;

テストと実際のアプリケーションの実行で動作が異なるのはなぜですか?

テストケースを作成したい場合の回避策は何ですか?

3

それを達成する方法があります。
Object.assign() メソッドを使用してオブジェクトの "clone"を作成します

let clone = Object.assign({}, this.props);

その値を変更して、結果として返します。

clone.defaultForm = true;
return clone;  

ただし、Object.assign()がオブジェクトの浅いコピーを作成することを考慮に入れてください。したがって、深いコピーが必要な場合は、次のアプローチを使用することをお勧めします。

let deepClone = JSON.parse(JSON.stringify(this.props));
deepClone.defaultForm = true;
return deepClone; 

乾杯。

3
voogieJames

コンポーネントのプロパティを変更することはできません。読み取り専用です。

あなたがそれを変更したい場合。 connectreduxと関数mapStateToPropsを使用する必要があります。

詳細については、こちらをご覧ください: https://redux.js.org/basics/usage-with-react#implementing-container-components

0
Damien