Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NestJS中的Mongoose测试服务_Javascript_Unit Testing_Nestjs_Nestjs Testing - Fatal编程技术网

Javascript NestJS中的Mongoose测试服务

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{ 构造函数()

我试图在NestJS中测试我的LoggingService,虽然我看不到测试中有任何错误,但我得到的错误是
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));
});