代码之家  ›  专栏  ›  技术社区  ›  manymanymore

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

  •  0
  • manymanymore  · 技术社区  · 3 年前

    如何为单元测试设置一个私有的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 ?我不想 一 一处房产,即我不想做 export let a = "b"; .我想保留 一 作为组件的内部状态,但我想嘲笑它。

    1 回复  |  直到 3 年前
        1
  •  1
  •   brunnerh    3 年前

    如果使用 dev 标志,您将在组件上获得用于捕获和设置组件状态的附加功能,例如具有 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 作为道具的一部分。