/ / Як перевірити JSON.parse в JEST - reactjs, jestjs

Як протестувати JSON.parse в JEST - реагує, jestjs

я намагався написати модульний тест, використовуючи JEST для реагуючого компонента, який отримує об'єкт JSON з locaStorage в компонентній функціїWillMount,

Реакційний компонент

import React from "react";

export default class Test extends React.Component {
constructor(props) {
super(props);
this.state = {
sampJSON: null,
username: null
}
}
componentWillMount(){
this.setState({
sampJSON: JSON.parse(localStorage.getItem("JSONResponse") || "{}");
});
this.setState({
username: sampJSON.username
});
}
render(){
return(){
<div>
<h1> Hi {this.state.username} </h1>
</div>
}
}
}

а тут мій тестовий код,

import React from "react";
import sinon from "sinon";
import Testing from "./Testing.js";
import TestUtils from "react-addons-test-utils";

jest.dontMock("Testing");
jest.dontMock("sinon");

describe("Testing Testing component", () => {
var JSONData = {
"username" : "Testing",
"surName" : "surName",
"email": "test@test.com"
}
beforeEach(function() {
// window.localStorage.setItem
var spy = sinon.spy(window.localStorage, "setItem");

// You can use this in your assertions
spy.calledWith("aKey", JSONData)
});
it("renders the Testing",() => {
var stub = sinon.stub(window.localStorage, "getItem");
stub.returns(JSONData);
var testCmp = TestUtils.renderIntoDocument(<Testing />);
expect(testCmp).toBeDefined();
});
});

коли я запускаю цей тест, я отримую помилку, як показано нижче.

- SyntaxError: Unexpected token o
at Object.parse (native)

Відповіді:

1 для відповіді № 1

JSONData повинен бути a рядок містить JSON, а не об'єкт.

Інакше localStorage.getItem("JSONResponse") повертає об'єкт. При дзвінку JSON.parse на об'єкті об'єкт буде перетворений у рядок "[object Object]" спочатку явно не варто JSON.

> JSON.parse({})
Uncaught SyntaxError: Unexpected token o in JSON at position 1(…)
> JSON.parse("[object Object]")
Uncaught SyntaxError: Unexpected token o in JSON at position 1(…)

Здається, найпростішим рішенням було б зателефонувати JSON.stringify:

stub.returns(JSON.stringify(JSONData));