我正在尝试以如下方式测试列表过滤器功能:
it("should filter the correct champions", () => {
const container = document.createElement("div");
document.body.appendChild(container);
act(() => {
render(
<Router>
<ChampionList />
</Router>,
container
);
});
const championListPre = container.querySelectorAll("tr");
expect(championListPre.length).toBeGreaterThan(1);
const search = container.querySelector("input");
act(() => {
fireEvent.change(search, { target: { value: "aatrox" } });
});
expect(search.value).toBe("aatrox");
const championListPost = container.querySelectorAll("tr");
expect(championListPost.length).toBe(1); // This will not be > 1
unmountComponentAtNode(container);
container.remove();
});
但是,由于某种原因,react 不会重新渲染列表(我的猜测)并且expect(championListPost.length).toBe(1);永远不会是真的。
输入如下所示:
<input
className="input"
type="text"
placeholder="Champion name"
value={this.searchValue}
onInput={this.handleChange}
/>
handleChange 改变组件的状态。
我不知道为什么会发生这种情况,我尝试了不同的方法,但都没有奏效。
慕侠2389804
相关分类