你好,我开始用 jest 研究单元测试,我有一个类有一个返回值的函数我想测试该函数的返回值,但我不知道这样做的正确方法是什么
>类:
interface HelloWord {
hello: string
}
export class HelloWordController extends Controller{
async handle (request: HelloWord): Promise<HttpResponse> {
return ok({message: 'hello word'})
}
}
确定:返回:
export const ok = (data: any): HttpResponse => ({
statusCode: 200,
body: data
})
测试:
describe("Hello word Controller ", () => {
it("should receive a string with name: hello, and value: hello word", () => {
const logger = new adptLogger({})
const hellowordController = new HelloWordController(logger)
expect(hellowordController.handle({hello: 'hello word'})).toEqual(ok)
});
});
我失败了:
Expected: [Function ok]
Received: {}
7 | const logger = new adptLogger({})
8 | const hellowordController = new HelloWordController(logger)
> 9 | expect(hellowordController.handle({hello: 'hello word'})).toEqual(ok)
| ^
10 | });
11 | });
已编辑:
describe("Hello word Controller ", () => {
let controller = {} as HelloWordController;
let logger: adptLogger = {} as adptLogger;
beforeEach(() => {
logger = new adptLogger({});
controller = new HelloWordController(logger);
});
afterEach(() => {
jest.restoreAllMocks();
});
it("should receive a string with name: hello, and value: hello word", async () => {
const expedtedReturn = {
statusCode: 200,
body: { message: "hello word" },
};
expect(await controller.handle({ hello: "hello word" })).toEqual(
expedtedReturn
);
});
it("should receive a bad string, and receive a bad request", async () => {
const expedtedError = {
statusCode: 400,
body: new Error(`bad Request`),
};
expect(await controller.handle({ hello: "aaa" })).toEqual(expedtedError);
});
});
答案 0 :(得分:1)
你需要监视你的方法。
如果你要添加更多的测试,用beforeEach
来监听应该没问题,然后用afterEach
恢复它们,这样你就可以控制返回值了。
你的方法是异步的,所以你的测试也应该,比如:
describe("Hello word Controller ", () => {
const mockedResponse = { message: "hello word" };
beforeEach(() => {
const controllerSpy = jest.spyOn(HelloWordController, "handle");
controllerSpy.mockReturnValue(Promise.resolve(mockedResponse));
});
afterEach(() => {
jest.restoreAllMocks();
});
it("should receive a string with name: hello, and value: hello word", async () => {
const logger = new adptLogger({})
const hellowordController = new HelloWordController(logger)
expect(await hellowordController.handle()).toEqual(mockedResponse);
});
});