如何为单元测试设置私有 svelte 变量?
例如我有组件:
//a.svelte
<script>
let a = "b";
</script>
<div data-testid="c">{a}</div>
我正在尝试测试该组件:
import { screen } from "@testing-library/svelte";
import a from "./a.svelte;
...
//arrange
const aMock = "d";
//act
render(a);
//assert
expect(screen.getByTestId("c").textContent).toBe("d");
如何将
a
设置在a.svelte
内?我不想将 a
设为属性,即我不想执行 export let a = "b";
。我想保留 a
作为组件的内部状态,但我想模拟它。
如果使用
dev
标志进行编译,您将在实例上获得用于捕获和设置组件状态的附加函数,例如默认 REPL 及其 name
状态生成:
$$self.$capture_state = () => ({ name });
$$self.$inject_state = $$props => {
if ('name' in $$props) $$invalidate(0, name = $$props.name);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
您还可以通过
$$inject
注入初始状态作为 props 的一部分。