维特斯未能嘲弄类星体



我正在使用带有vite和vitest的vue3应用程序,并试图模拟我在自定义可组合文件中使用的QuasaruseQuasar可组合文件,如:

// useLoginRequestBuilder.ts
import { makeUserAuthentication } from "@/main/factories"
import { useQuasar } from "quasar"
export function useLoginRequestBuilder() {
const $q = useQuasar()
async function login() {
try {
$q.loading.show()
const auth = makeUserAuthentication()
return await auth.signinRedirect()
} catch (e) {
console.log(e)
$q.loading.hide()
$q.notify({
color: "red-4",
textColor: "white",
icon: "o_warning",
message: "Login Failed!",
})
}
}
return {
login,
}
}

我试图在测试中模拟quasar,比如:

// useLoginRequestBuilder.spec.ts
import { useLoginRequestBuilder } from "@/main/builders"
vi.mock("quasar", () => ({ // <--- this is not really mocking quasar
useQuasar: () => ({
loading: {
show: () => true,
hide: () => true,
},
}),
}))
const spyAuth = vi.fn(() => Promise.resolve(true))
vi.mock("@/main/factories", () => ({
makeUserAuthentication: () => ({
signinRedirect: () => spyAuth(),
}),
}))
describe("test useLoginRequestBuilder", () => {
test("should call signinRedirect", async () => {
const { login } = useLoginRequestBuilder()
const sut = await login()
expect(sut).toBe(true)
})
})

vi.mock("quasar"...未能模拟类星体,我得到了以下错误。也就是说,它未能模拟并未能获取$q.loading....对象。

TypeError: Cannot read properties of undefined (reading 'loading')

我知道有一个单独的类星体测试库,但我认为这里的情况并非如此。

在一篇necro帖子上进行了边界处理,但我遇到了一个类似的问题,即mocking工厂没有创建非Vue组件中使用的插件,最终不得不单独模拟每个调用。

尽管我会在这里为其他人添加

vitest.mock("quasar", () => vi.fn()); // this doesn't mock out calls
// use individual mocks as below
import { Loading } from "quasar";
vi.spyOn(Loading, "show").mockImplementation(() => vi.fn());
vi.spyOn(Loading, "hide").mockImplementation(() => vi.fn());

最新更新