期望在函数内的 class 实例上调用方法
Expect method to be called on class instance within function
您好,我正在尝试断言已在文件实例化的 class 实例上调用函数。这里我有一个文件,它创建了 class Usecase
的一个新实例,然后有一个函数调用这个实例的方法。我正在测试这个文件,我想断言它已经调用了 class 实例上的方法。到目前为止,我已经在下面编写了我尝试的简化设置。然而,它表明 usecase.submitTaxes
尽管被调用了,但从未被调用过(我什至用日志语句来确认)。
我怀疑 index.test.ts
中的 usecase
和 index.ts
中的 usecase
是不同的实例化,因此我不能断言该方法已被调用,因为技术上index.test.ts
中的 usecase
尚未调用。但是我不明白如何获得一个句柄,以便我可以在我正在测试的文件中创建的实例上编写期望行?
通常我会使用依赖注入来解决这个问题,但我不能在这里使用依赖注入,因为这是加载的第一个文件(它是一个 Lambda)。
没有 DI 可能无法做到这一点,但如果有人对解决方案有任何想法,我们将不胜感激。
//usecase.ts
export default class Usecase {
async submitTaxes(): Promise<void> {
await dependency.x();
}
}
// index.ts
import Usecase from "usecase";
const usecase = new Usecase(...);
export const handler = async (event) => {
await usecase.submitTaxes();
}
// index.test.ts
import { handler } from "../../../src/index";
jest.mock("../../../src/usecase");
describe("Test", () => {
let usecase: Usecase;
beforeAll(() => {
usecase = new Usecase(...); // will this be the same mock that index.ts uses?
});
it("Test", async () => {
// GIVEN
const event = ...;
// WHEN
await handler(event);
// THEN
expect(usecase.submitTaxes).toHaveBeenCalled(); // fails with no calls
});
});
will this be the same mock that index.ts uses?
- 不,它是 Usecase
的不同实例被嘲笑 class。
尝试获取在 index.js
文件中创建的模拟实例。参考 link.
import { handler } from './index'; // update this path
import Usecase from './usecase'; // // update this path
import { mocked } from 'ts-jest/utils';
jest.mock('./usecase'); // update this path
describe('Test', () => {
let usecase: jest.Mocked<Usecase>;
beforeAll(() => {
// get the mocked instance
usecase = mocked(Usecase).mock.instances[0] as jest.Mocked<Usecase>;
});
it('Test', async () => {
// GIVEN
const event = {};
// WHEN
await handler(event);
// THEN
expect(usecase.submitTaxes).toHaveBeenCalled();
});
});
您好,我正在尝试断言已在文件实例化的 class 实例上调用函数。这里我有一个文件,它创建了 class Usecase
的一个新实例,然后有一个函数调用这个实例的方法。我正在测试这个文件,我想断言它已经调用了 class 实例上的方法。到目前为止,我已经在下面编写了我尝试的简化设置。然而,它表明 usecase.submitTaxes
尽管被调用了,但从未被调用过(我什至用日志语句来确认)。
我怀疑 index.test.ts
中的 usecase
和 index.ts
中的 usecase
是不同的实例化,因此我不能断言该方法已被调用,因为技术上index.test.ts
中的 usecase
尚未调用。但是我不明白如何获得一个句柄,以便我可以在我正在测试的文件中创建的实例上编写期望行?
通常我会使用依赖注入来解决这个问题,但我不能在这里使用依赖注入,因为这是加载的第一个文件(它是一个 Lambda)。
没有 DI 可能无法做到这一点,但如果有人对解决方案有任何想法,我们将不胜感激。
//usecase.ts
export default class Usecase {
async submitTaxes(): Promise<void> {
await dependency.x();
}
}
// index.ts
import Usecase from "usecase";
const usecase = new Usecase(...);
export const handler = async (event) => {
await usecase.submitTaxes();
}
// index.test.ts
import { handler } from "../../../src/index";
jest.mock("../../../src/usecase");
describe("Test", () => {
let usecase: Usecase;
beforeAll(() => {
usecase = new Usecase(...); // will this be the same mock that index.ts uses?
});
it("Test", async () => {
// GIVEN
const event = ...;
// WHEN
await handler(event);
// THEN
expect(usecase.submitTaxes).toHaveBeenCalled(); // fails with no calls
});
});
will this be the same mock that index.ts uses?
- 不,它是 Usecase
的不同实例被嘲笑 class。
尝试获取在 index.js
文件中创建的模拟实例。参考 link.
import { handler } from './index'; // update this path
import Usecase from './usecase'; // // update this path
import { mocked } from 'ts-jest/utils';
jest.mock('./usecase'); // update this path
describe('Test', () => {
let usecase: jest.Mocked<Usecase>;
beforeAll(() => {
// get the mocked instance
usecase = mocked(Usecase).mock.instances[0] as jest.Mocked<Usecase>;
});
it('Test', async () => {
// GIVEN
const event = {};
// WHEN
await handler(event);
// THEN
expect(usecase.submitTaxes).toHaveBeenCalled();
});
});