我正在嘗試使用 svelte 測驗庫測驗組件。
該組件有一個輸入標簽,其值系結(使用bind:)到一個狀態變數,并且該狀態變數指示標題的文本。
因此,當您更改 input 標簽的值時,它會更改標題中的文本。
我使用 svelte 測驗庫設定了一個單元測驗,并用于fireEvent更改輸入標簽的值,但是在斷言標題中的文本時,它沒有改變。就好像輸入標簽值發生了變化,但 svelte 組件狀態沒有更新。
為什么狀態不變,標題不變?我需要做些什么才能讓它更新嗎?
Codesandbox repro(運行測驗用例查看問題):https ://codesandbox.io/s/xnxjo
uj5u.com熱心網友回復:
一些事情:
當您
bind:value在 Svelte 中的輸入組件上使用時,Svelte 會附加一個input事件偵聽器以了解何時更新值。觸發更改事件將更新值,但不會觸發事件偵聽器。因此,使用fireEvent.input代替fireEvent.change.僅僅因為事件已觸發并不意味著組件狀態已更新。您可以
fireEvent使用act進行包裝,以確保在斷言任何內容之前更新組件。
更新測驗:
it("should write in input (variant)", async () => {
const app = render(App);
const input = app.getByLabelText("textbox");
await act(() => fireEvent.input(input, { target: { value: "test" } }));
expect(input.value).toBe("test");
expect(app.container.querySelector("h1").textContent).toBe("test");
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322676.html
上一篇:如何模擬函式的函式?
