用 Quasar 和 Typescript 开玩笑
Posted
技术标签:
【中文标题】用 Quasar 和 Typescript 开玩笑【英文标题】:Jest Mocking with Quasar and Typescript 【发布时间】:2021-01-10 03:10:48 【问题描述】:我想在我的测试中模拟 Amplify Auth 服务。没有错误,但由于我的模拟,测试不起作用。
这是我要测试的代码:
signIn(): void
if (!this.valid) return;
this.loading = 1;
this.$Auth
.signIn(this.email, this.password)
.then(() => this.$router.push( name: "homeManagement" ))
.catch((err: any) => (this.errorMessage = err.message))
.finally(() => (this.loading = 0));
这是测试:
const $t = jest.fn();
$t.mockReturnValue("");
const $Auth = jest.fn();
$Auth.mockReturnValue(
code: "UserNotFoundException",
name: "UserNotFoundException",
message: "User does not exist."
);
const factory = mountFactory(LoginForm,
mount:
mocks:
$Auth
);
describe("LoginForm", () =>
it("User not found", async () =>
const wrapper = factory();
await wrapper.setData(
email: "david@gmail.com",
password: "Qwer321"
);
await wrapper.vm.signIn();
expect(wrapper.vm.$data.errorMessage.length).not.toEqual(0);
);
);
【问题讨论】:
【参考方案1】:想出了一个解决方案,但也许有一个更好的 flush-promises 来模拟 Amplify 调用:
const $Auth = jest.fn();
$Auth.signIn = () => Promise.resolve();
describe("LoginForm", () =>
it("User does not exist", async () =>
const wrapper = factory();
await wrapper.setData(
email: "david@gmail.com",
password: "Qwer321",
valid: true
);
await wrapper.vm.signIn();
await flushPromises();
expect(wrapper.vm.$data.errorMessage.length).not.toEqual(0);
);
);
【讨论】:
以上是关于用 Quasar 和 Typescript 开玩笑的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Vue3 和 Typescript 在 Quasar Framework 中定义 ref 方法的类型
无法使用 typescript 用 jest 模拟 fs - 类型上不存在属性“mockReturnValue”
如何允许 scss 开玩笑地对 typescript nextjs 进行单元测试?