我正在用supertest为我的NestJS +猫鼬应用程序编写端到端测试。我能够模拟find()
,delete()
等猫鼬api。
但是使用猫鼬save()
api,对于代码this.CatModel(CatObject)
,模拟无法正常工作。我没有用于测试系统的mongodb,所以我需要对其进行模拟。
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);
});
});
});
export const mockCatModel = {
find: (obj) => {
return [catMock];
},
save : (cat) => {
return cat;
}
};
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)
,请提供帮助。
答案 0 :(得分:0)
您是否尝试过使用useClass
而不是useValue
?
答案 1 :(得分:0)
您可以尝试。或者可以)
let app: INestApplication;
let testingModule: TestingModule;
let spyService: CatsService;
beforeEach(async () => {
testingModule = await Test.createTestingModule({
controllers: [CatsController],
providers: [
{
provide: CatsService,
useFactory: () => ({
findAll: jest.fn((obj) => [catMock]),
save: jest.fn((cat) => cat)
}),
},
],
}).compile();
spyService = testingModule.get(CatsService);
app = testingModule.createNestApplication();
await app.init();
});