首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ts-mockito来模拟命名的nestjs Logger?

如何用ts-mockito来模拟命名的nestjs Logger?
EN

Stack Overflow用户
提问于 2022-07-01 11:36:46
回答 2查看 150关注 0票数 0

我们的项目使用带有mocha、chai和ts-mockito的nestjs进行测试,我不知道如何测试一个命名的nestjs Logger

new Logger()可以按预期进行测试:

代码语言:javascript
复制
describe('basic test', () => {
    it('works', async () => {
        const mockLogger = mock<LoggerService>();
        const moduleRef = await Test.createTestingModule({
            providers: [
                {
                    provide: TestClass,
                    useValue: new TestClass(),
                },
            ],
        })
            .setLogger(instance(mockLogger))
            .compile();

        const unit = moduleRef.get(TestClass);

        unit.log();

        verify(mockLogger.error(anything())).once();
    });
});

class TestClass {
    readonly logger: Logger;
    constructor() {
        this.logger = new Logger();
    }

    public log() {
        this.logger.error(new Error());
    }
}

但是使用指定的记录器无法通过测试:

代码语言:javascript
复制
class TestClass {
    readonly logger: Logger;
    constructor() {
        this.logger = new Logger('name');
    }

    public log() {
        this.logger.error(new Error());
    }
}

// Expected "error(anything())" to be called 1 time(s). But has been called 0 time(s).

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-15 10:49:26

我设法通过使用capture而不是verify来解决可选的参数问题,例如以前:

代码语言:javascript
复制
    verify(mockX.getUsers({key: 'val'}) ).once();

之后:

代码语言:javascript
复制
    const [opts] = capture(mockX.getUsers).last();
    expect(opts).toEqual({key: 'val'});
票数 1
EN

Stack Overflow用户

发布于 2022-07-01 11:36:46

这是由于This处理可选函数参数的方式。关于这个问题的一个问题可以找到here

呼叫

代码语言:javascript
复制
new Logger('name').error(message);

实际上与调用

代码语言:javascript
复制
new Logger().error('message', 'name');

需要修改模拟,以反映参数中的这种差异。

改变

代码语言:javascript
复制
verify(mockLogger.error(anything())).once();

代码语言:javascript
复制
verify(mockLogger.error(anything(), anything())).once();

解决问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72828668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档