【问题标题】:How to clear/reset mocks in Vitest如何在 Vitest 中清除/重置模拟
【发布时间】:2022-11-02 17:17:31
【问题描述】:

我有一个简单的可组合 useRoles 我需要测试

import { computed } from "vue";
import { useStore } from "./store";

export default function useRoles() {
  const store = useStore();

  const isLearner = computed(() => store.state.profile.currentRole === "learner");

  return {
    isLearner
  };
}

我的测试方法如下

import { afterEach, expect } from "vitest";
import useRoles from "./useRoles";

describe("useRoles", () => {
  afterEach(() => {
    vi.clearAllMocks();
    vi.resetAllMocks();
  });

  it("should verify values when is:Learner", () => { // works
    vi.mock("./store", () => ({
      useStore: () => ({
        state: {
          profile: {
            currentRole: "learner"
          },
        },
      }),
    }));

    const { isLearner } = useRoles();

    expect(isLearner.value).toBeTruthy();
  });

  it("should verify values when is:!Learner", () => { //fails
    vi.mock("./store", () => ({
      useStore: () => ({
        state: {
          profile: {
            currentRole: "admin"
          },
        },
      }),
    }));

    const { isLearner } = useRoles(); // Values are from prev mock

    expect(isLearner.value).toBeFalsy();
  });
});

useStore 只是我打算模拟的一个简单函数

export function useStore() {
  return {/**/};
}

第一个测试成功运行,它具有我实现的所有模拟值,但问题是它没有为每个测试重置(根本没有重置)。第二个测试具有前一个模拟的旧值。

我用过

vi.clearAllMocks();
vi.resetAllMocks();

但由于某种原因,清除或重置没有发生。

如何清除每个测试的 vi.mock 值?

vitest = v0.23.0

【问题讨论】:

    标签: javascript typescript vuejs3 vitest


    【解决方案1】:

    我遇到了同样的问题,并且能够找到解决方法。在您的情况下,它应该如下所示:

    import { afterEach, expect } from "vitest";
    import useRoles from "./useRoles";
    
    vi.mock("./store");
    
    describe("useRoles", () => {
      it("should verify values when is:Learner", async () => {
        const store = await import("./store");
        store.useStore = await vi.fn().mockReturnValueOnce({
          useStore: () => ({
            state: {
              profile: {
                currentRole: "learner"
              },
            },
          }),
        });
    
        const { isLearner } = useRoles();
    
        expect(isLearner.value).toBeTruthy();
      });
    
      it("should verify values when is:!Learner", async () => {
        const store = await import("./store");
        store.useStore = await vi.fn().mockReturnValueOnce({
          useStore: () => ({
            state: {
              profile: {
                currentRole: "admin"
              },
            },
          }),
        });
    
        const { isLearner } = useRoles(); // Values are from prev mock
    
        expect(isLearner.value).toBeFalsy();
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2022-10-05
      • 2023-02-06
      • 2020-09-11
      • 2023-02-05
      • 2021-04-25
      • 1970-01-01
      • 2011-09-09
      • 2022-08-23
      • 1970-01-01
      相关资源
      最近更新 更多