Javascript NestJS中的Mongoose测试服务
我试图在NestJS中测试我的LoggingService,虽然我看不到测试中有任何错误,但我得到的错误是Javascript NestJS中的Mongoose测试服务,javascript,unit-testing,nestjs,nestjs-testing,Javascript,Unit Testing,Nestjs,Nestjs Testing,我试图在NestJS中测试我的LoggingService,虽然我看不到测试中有任何错误,但我得到的错误是error:无法监视save属性,因为它不是函数;而不是给定未定义的 正在测试的函数(为简洁起见进行了修剪): 模拟模型: class MockLoggingAuthModel { constructor() { } public async save(): Promise<void> { } } 类MockLoggingAuthModel{ 构造函数()
error:无法监视save属性,因为它不是函数;而不是给定未定义的
正在测试的函数(为简洁起见进行了修剪):
模拟模型:
class MockLoggingAuthModel {
constructor() {
}
public async save(): Promise<void> {
}
}
类MockLoggingAuthModel{
构造函数(){
}
公共异步保存():承诺{
}
}
问题来自这样一个事实:您将一个类传递给测试模块,同时告诉它它是一个值
使用useClass
创建TestingModule
:
beforeEach(async () => {
request = new JestRequest();
const module: TestingModule = await Test.createTestingModule({
providers: [
LoggingService,
{
provide: getModelToken(LOGGING_AUTH_MODEL),
// Use useClass
useClass: mockLoggingAuthModel,
},
{
provide: getModelToken(LOGGING_EVENT_MODEL),
// Use useClass
useClass: MockLoggingEventModel,
},
],
}).compile();
service = module.get(LoggingService);
mockLoggingAuthModel = module.get(getModelToken(LOGGING_AUTH_MODEL));
});
问题来自这样一个事实:您将一个类传递给TestingModule
,同时告诉它它是一个值
使用useClass
创建TestingModule
:
beforeEach(async () => {
request = new JestRequest();
const module: TestingModule = await Test.createTestingModule({
providers: [
LoggingService,
{
provide: getModelToken(LOGGING_AUTH_MODEL),
// Use useClass
useClass: mockLoggingAuthModel,
},
{
provide: getModelToken(LOGGING_EVENT_MODEL),
// Use useClass
useClass: MockLoggingEventModel,
},
],
}).compile();
service = module.get(LoggingService);
mockLoggingAuthModel = module.get(getModelToken(LOGGING_AUTH_MODEL));
});
在更多的谷歌搜索之后,我设法找到了这个测试示例Repo:其中包括Mongo上的示例,还建议使用this.model(data)
使测试复杂化,而应该使用'this.model.create(data)
在做了这样的更改之后,测试按预期进行。在进行了更多的谷歌搜索之后,我设法找到了这个测试示例Repo:其中包括Mongo上的示例,并建议使用this.model(data)
使测试复杂化,应该使用'this.model.create(data)'
做出更改后,测试按预期工作。这给了我一个新错误:TypeError:this.loggingAuthModel不是构造函数
使用服务文件中的其余内容更新了OP,没有更多内容。感谢@Baboo_u的帮助,但在发现我只是更改了代码之后,该示例还建议避免执行我所做的操作,因为这会使测试变得非常复杂。这给了我一个新错误:TypeError:this.loggingAuthModel不是构造函数
使用服务文件中的其余内容更新了OP,没什么大不了的。感谢@Baboo_u的帮助,但在发现我只是修改了代码之后,这个例子还建议避免做我已经做过的事情,因为这会使测试变得非常复杂。
beforeEach(async () => {
request = new JestRequest();
const module: TestingModule = await Test.createTestingModule({
providers: [
LoggingService,
{
provide: getModelToken(LOGGING_AUTH_MODEL),
// Use useClass
useClass: mockLoggingAuthModel,
},
{
provide: getModelToken(LOGGING_EVENT_MODEL),
// Use useClass
useClass: MockLoggingEventModel,
},
],
}).compile();
service = module.get(LoggingService);
mockLoggingAuthModel = module.get(getModelToken(LOGGING_AUTH_MODEL));
});