Javascript 为什么我们在比较两个组件时需要使用JSON?
我编写的组件将带换行符的文本转换为html段落 Text.jsJavascript 为什么我们在比较两个组件时需要使用JSON?,javascript,reactjs,testing,jestjs,enzyme,Javascript,Reactjs,Testing,Jestjs,Enzyme,我编写的组件将带换行符的文本转换为html段落 Text.js const Text = props => (( <div> { props.paragraph.split('\n').map((line, index) => { if (line.length === 0) return; return <p key={index}>{ line }</p>; })} </div> )
const Text = props => ((
<div>
{ props.paragraph.split('\n').map((line, index) => {
if (line.length === 0) return;
return <p key={index}>{ line }</p>;
})}
</div>
)
);
笑话告诉区别如下
比较的值序列化到同一结构。
打印内部对象结构而不调用toJSON
我用谷歌搜索了一下,但找不到任何关于toJSON的线索
- 为什么这里需要
toJSON
通常做什么toJSON
- 我在哪里可以找到关于toJSON的参考资料
toJSON
的属性,其值是一个函数,那么toJSON
方法定制JSON字符串化行为:调用toJSON
方法时返回的值将被序列化,而不是序列化的对象
示例:
//不带toJSON
常数a={
b:1
};
console.log(
JSON.stringify(a)
)
谢谢你的详细评论!我不知道是否有必要。但是我在没有toJSON的情况下遇到了以下错误。>-“_-debugID”:17,>+“_-debugID”“:9,正因为如此,我认为我不能仅仅比较两个组件。然后我就去跟医生开玩笑。几乎每次它都通过调用toJSON()方法呈现组件进行测试。所以我认为这可以解决我的问题,实际上它似乎解决了。我发现npm测试没有错误,你能告诉我我对这个想法是否有误解吗?@KanUchida是的,你是对的。Jasmine测试使用对象,但不使用引用,例如函数,即使它们具有相同的结构(但分配在内存中的其他位置)。总是在React组件上调用.toJSON()方法来获得安全的对象文本-没有这些引用。我明白了!谢谢!我深深地理解你:D
it('ignores \\n at last', () => {
const paragraphA = 'aa\nbbb\n';
const paragraphB = 'aa\nbbb';
const cA = renderer.create(<Text paragraph={paragraphA} />);
const cB = renderer.create(<Text paragraph={paragraphB} />);
expect(cA).toEqual(cB); // NG
expect(cA.toJSON()).toEqual(cB.toJSON()); // OK
});