Joh*_*etz 5 reactjs jestjs react-test-renderer
假设我有以下基本组件Basic.js:
import React, { useState, useEffect } from 'react';
export default () => {
const [items, setItems] = useState([{ name: 'original' }]);
useEffect(() => {
setItems([{ name: 'new1' }, { name: 'new2' }]);
}, []);
return (
<div>{items && items.map((item, i) => <div key={i}>{item.name}</div>)}</div>
);
};
Run Code Online (Sandbox Code Playgroud)
使用react-test-renderer,我可以编写以下测试:
import React from 'react';
import TestRenderer from 'react-test-renderer';
import Basic from './Basic';
describe('Basic', () => {
test('renders', async done => {
let component = TestRenderer.create(<Basic />);
setImmediate(() => {
expect(component.toJSON()).toMatchSnapshot();
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
当我运行时,它会生成以下笑话快照npm test:
exports[`Basic renders 1`] = `
<div>
<div>
original
</div>
</div>
`;
Run Code Online (Sandbox Code Playgroud)
如何编写测试以便useEffect运行挂钩并反映在快照中?所以生成的快照看起来像这样:
exports[`BasicClass renders 1`] = `
<div>
<div>
new1
</div>
<div>
new2
</div>
</div>
`;
Run Code Online (Sandbox Code Playgroud)
这是不可能的吗,是否有一个测试库可以用来运行这个钩子?
小智 7
使用行为
import React from 'react';
import TestRenderer from 'react-test-renderer';
import Basic from './Basic';
describe('Basic', () => {
test('renders', async () => {
let component;
await act(async () => {
component = TestRenderer.create(<Basic />);
});
expect(component.toJSON()).toMatchSnapshot();
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4052 次 |
| 最近记录: |