首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在试图模仿猫鼬模型的时候,测试会让人抓狂?

为什么在试图模仿猫鼬模型的时候,测试会让人抓狂?
EN

Stack Overflow用户
提问于 2020-07-30 09:48:29
回答 1查看 150关注 0票数 0

我有下一张卡模型

代码语言:javascript
复制
export class Card extends Document {
@Prop({ required: true, immutable: true})
id: string;

@Prop({ required: true })
name: string;
...
export const CardSchema = SchemaFactory.createForClass(Card);
}

当我试图模拟测试中的数据时,测试就冻结了。

代码语言:javascript
复制
import { INestApplication } from '@nestjs/common';
import { Test } from '@nestjs/testing';
import * as request from 'supertest';
import { AppModule } from '../../../../src/app.module';
import { createAuthToken } from '../../../helpers/auth.helper';
import { Card } from '../../../../src/card/card.schema';
import { Model } from 'mongoose';
import { getModelToken } from '@nestjs/mongoose';
import mockingoose from 'mockingoose';

describe('GET /card:id', () => {
  let app: INestApplication;
  let cardModel: Model<Card>;

  beforeAll(async () => {
...
  });

  it('Should receive card data', async () => {
...
    mockingoose(cardModel).toReturn(_doc, 'findOne');
    return request(app.getHttpServer())
      .get('/card/test')
      .set('Content-Type', 'application/json')
      .set('Authorization', `Bearer ${createAuthToken(user)}`)
      .expect(200);
  })
  ...
});

我有控制器,DTO和加载实体的服务。

这是控制台屏幕:测试测井屏

EN

回答 1

Stack Overflow用户

发布于 2022-04-13 20:55:51

这可能是由于“猫鼬”的不同实例之间的相互作用。检查是否在模块层次结构中导入了猫鼬的其他实例。

我有一个和你描述的非常相似的问题。使用多个导入,它们中有几个正在加载猫鼬对象,当我添加mockingoose时,这些对象一起使测试用例无限期挂起。

例如,假设模块A导入/加载‘猫鼬’,然后导入同样需要/加载' mongoose‘(并模拟猫鼬连接)的mockingoose。由于某些原因,这些可能相互冲突的猫鼬引用之间存在着奇怪的相互作用,使得测试用例无限期地挂起而没有响应。

我解决这个问题的方法是重构代码,这样在使用mockingoose时,我所指的唯一位置就是测试文件。我所有导入的模块都不引用猫鼬对象。您可以通过利用依赖注入的良好设计来做到这一点。

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

https://stackoverflow.com/questions/63170559

复制
相关文章

相似问题

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