我试图模拟一个私有的、类级的实例属性,这样我就可以断言它是否被调用了。在这种情况下,它是一个NestJs Logger实例,但我相信这个问题是一个更广泛的问题。
下面是正在测试的课程:
import { Logger } from '@nestjs/common';
export class SomeService {
private readonly logger = new Logger(SomeService.name);
methodUnderTest(someNumber: number): string {
if (someNumber === 5) {
return 'Greater';
else {
this.logger.error('It is definitely not 5.');
}
}
}
下面是我的(尝试)测试类:
import { Logger } from '@nestjs/common';
jest.mock('@nestjs/common'); // This is causing the error below.
const someService = new SomeService();
describe('SomeService - methodUnderTest', () => {
it('should call logger.error when someNumber is not 5', () => {
someService.methodUnderTest(2);
expect(Logger.error).toHaveBeenCalled(); // This is incorrect.
}
}
我知道这不对。我想知道我是否要用间谍,但我不知道该怎么做。目前,我在执行测试时收到此错误:
● Test suite failed to run
TypeError: index_1.Injectable is not a function
at Object.<anonymous> (../.yarn/__virtual__/@nestjs-common-virtual-992fab1572/0/cache/@nestjs-common-npm-8.2.4-cc0ecb2b32-a2945b7fb7.zip/node_modules/@nestjs/common/pipes/parse-float.pipe.js:40:13)
at Object.<anonymous> (../.yarn/__virtual__/@nestjs-common-virtual-992fab1572/0/cache/@nestjs-common-npm-8.2.4-cc0ecb2b32-a2945b7fb7.zip/node_modules/@nestjs/common/pipes/index.js:8:22)
发布于 2022-10-04 18:04:37
答案确实是用间谍。这个错误是由这一行引发的,实际上根本不需要它:
jest.mock('@nestjs/common');
这是一个可行的解决方案,最终非常简单:
import {describe, expect, it, jest } from '@jest/globals';
import { Logger } from '@nestjs/common';
const loggerSpy = jest.spyOn(Logger.prototype, 'error');
const someService = new SomeService();
describe('SomeService - methodUnderTest', () => {
it('should call logger.error when someNumber is not 5', () => {
someService.methodUnderTest(2);
expect(loggerSpy).toHaveBeenCalled();
}
}
https://stackoverflow.com/questions/73951027
复制相似问题