如何为单元测试设置私有 svelte 变量?

问题描述 投票:0回答:1

如何为单元测试设置私有 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
作为组件的内部状态,但我想模拟它。

mocking svelte private testing-library
1个回答
0
投票

如果使用

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 的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.