我有服务:
export default class WorldService {
constructor(worldmodel) {
this.worldmodel = worldmodel;
}
async getWorlds() {
let resData = {};
await this.worldmodel.find({},(err,worlds) => {
resData = worlds;
});
return resData;
}
}
我有一个猫鼬模型:
import mongoose from 'mongoose';
const worldSchema = mongoose.Schema({
name: {
type: String,required: true,},});
export default mongoose.model('World',worldSchema);
我想模拟Mongoose模型并测试名为getWorlds()
的服务功能。我在项目中使用 Jest 作为测试框架。
我试图用Jest编写单元测试:
import Worldmodel from '../../../src/models/world';
import WorldService from '../../../src/services/world';
describe('When data is valid',() => {
beforeAll(() => {
jest.spyOn(Worldmodel,'find').mockReturnValue(Promise.resolve([
{ _id: '5dbff32e367a343830cd2f49',name: 'Earth',__v: 0 },{ _id: '5dbff89209dee20b18091ec3',name: 'Mars',]));
});
it('Should return entries',async () => {
const worldService = new WorldService(Worldmodel);
const expected = [
{ _id: '5dbff32e367a343830cd2f49',];
await expect(worldService.getWorlds()).resolves.toEqual(expected);
});
});
我得到一个失败的答案:
FAIL test/unit/services/world.test.js
When data is valid
× Should return entries (9ms)
● When data is valid › Should return entries
expect(received).resolves.toEqual(expected) // deep equality
Expected: [{"__v": 0,"_id": "5dbff32e367a343830cd2f49","name": "Earth"},{"__v": 0,"_id": "5dbff89209dee20b18091ec3","name": "Mars"}]
Received: {}
如何在Jest中模拟猫鼬 find()
函数?
P.s。我不想对 MongoDB 使用任何更高级别的测试框架,例如 mockgoose 。