【发布时间】:2019-09-30 22:24:54
【问题描述】:
我正在用 supertest 为我的 NestJS + mongoose 应用程序编写端到端测试。我可以模拟 find()、delete() 等 mongoose api。
但是使用猫鼬save() api,对于代码this.CatModel(CatObject),模拟不起作用。我没有用于测试系统的 mongodb,所以我需要模拟它。
cat.e2e-spec.ts
describe('cat apis', () => {
let app: INestApplication;
beforeAll(async () => {
const module = await Test.createTestingModule({
imports: [CatModule]
})
.overrideProvider(getModelToken('Cat'))
.useValue(mockCatModel)
.compile();
app = module.createNestApplication();
server = app.getHttpServer();
await app.init();
});
it(`POST /cat `, async () => {
return await request(server)
.post('/cat')
.send(newCatPayload)
.set('Accept', 'application/json')
.expect(201)
.expect(({ body }) => {
expect(body).toEqual(expectedResponse);
});
});
});
catModel.ts
export const mockCatModel = {
find: (obj) => {
return [catMock];
},
save : (cat) => {
return cat;
}
};
cat.service.ts
public async createCat(catObject: CreateCatDto, user): Promise<ICat> {
const oCat = this.catModel(catObject);
oCat.user = user;
return await oCat.save();
}
this.catModel.find() 工作正常,但 this.catModel() 抛出错误:
'this.catModel is not a function'.
我在catModel.ts中试过,添加下面的函数,
function : (a) => {return a;}
但是没有用。如果有人知道如何模拟this.catModel(catObject),请提供帮助。
【问题讨论】:
-
只是为了确定,您在
cat.e2e-spec.ts代码中声明的server变量在哪里?
标签: mongoose jestjs e2e-testing nestjs supertest