Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: Cannot assign to read only property 'x' of object '#<Object>' React/JEST

While I am writing test case for my react component I am getting

TypeError: Cannot assign to read only property 'x' of object '#'

wherein while the application run it does not throw similiar error

The code for it is pretty basic

this.props.defaultForm = true;

Why the behavior is different for test and actual application RUN?

What would be work around if I want to write a test case?

like image 759
Pragam Shrivastava Avatar asked Feb 20 '18 12:02

Pragam Shrivastava


1 Answers

There is a way to accomplish that;

Create a "clone" of your object with Object.assign() method, or JavaScript spread operator

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

or

let clone = { ...this.props };

Then, change the values you need and return the clone as a result.

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

But take into account that Object.assign() creates a shallow copy of an object. Thus, if you need to have a deep copy, I would recommend to use following approach:

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

Here, "stringifying" the object and then parsing it back will create completely new deeply cloned copy of the object.

like image 73
theVoogie Avatar answered Sep 22 '22 08:09

theVoogie