Javascript 用笑话测试猫鼬模型
我试着用笑话来测试我的猫鼬模型。我的模型如下所示:Javascript 用笑话测试猫鼬模型,javascript,mongoose,jestjs,Javascript,Mongoose,Jestjs,我试着用笑话来测试我的猫鼬模型。我的模型如下所示: const mongoose = require('mongoose'); const slug = require('slugs'); mongoose.Promise = global.Promise; const cinemaSchema = new mongoose.Schema({ name: { type: String, trim: true, required: 'Please enter a ci
const mongoose = require('mongoose');
const slug = require('slugs');
mongoose.Promise = global.Promise;
const cinemaSchema = new mongoose.Schema({
name: {
type: String,
trim: true,
required: 'Please enter a cinema name'
},
slug: String,
description: {
type: String,
trim: true
},
capacity: {
type: Number,
required: 'Please enter a capacity'
}
});
cinemaSchema.pre('save', function(next) {
if (!this.isModified('name')) {
next();
return
}
this.slug = slug(this.name);
next();
})
module.exports = mongoose.model('Cinema', cinemaSchema)
我已经在下面编写了一些测试,但是当我尝试运行它们并访问它们的结果时,我收到了未定义的结果。我在这里使用.validate
函数,因为我不想实际访问我的数据库
测试是这样的。我删除了预期,因为我只想访问错误:
const mongoose = require('mongoose');
const Cinema = require('./Cinema');
describe('Cinema', () => {
it('Should return an error if a number is passed as the name', (done) => {
const cinema = new Cinema({name: 2, description: 'good', capacity: 1});
cinema.validate(response => {
console.log(response);
done();
});
})
})
知道我为什么在这里没有定义吗?因为猫鼬会尝试将电影
name
转换成string,而且它成功地做到了这一点。尝试将capacity
更改为字符串:capacity:'saasd'
您将得到如下结果:
{
ValidationError: Cinema validation failed: capacity: Cast to Number failed for value "saasd" at path "capacity"
at ValidationError.Object.<anonymous>.ValidationError.inspect (/Users/fabio/playground/mongoose/node_modules/mongoose/lib/error/validation.js:56:24)
at formatValue (util.js:430:38)
at inspect (util.js:324:10)
at format (util.js:191:12)
at CustomConsole.log (/Users/fabio/playground/mongoose/node_modules/jest-util/build/Console.js:135:53)
at cinema.validate.response (/Users/fabio/playground/mongoose/cinema.test.js:12:15)
at /Users/fabio/playground/mongoose/node_modules/mongoose/lib/document.js:1432:5
at /Users/fabio/playground/mongoose/node_modules/mongoose/lib/document.js:1564:9
at /Users/fabio/playground/mongoose/node_modules/kareem/index.js:135:16
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
errors: {
capacity: MongooseError {
message: 'Cast to Number failed for value "saasd" at path "capacity"',
name: 'CastError',
stringValue: '"saasd"',
kind: 'Number',
value: 'saasd',
path: 'capacity',
reason: [Object]
}
},
_message: 'Cinema validation failed',
name: 'ValidationError'
}
{
ValidationError:影院验证失败:容量:路径“capacity”处的值“saasd”转换为数字失败
在ValidationError.Object..ValidationError.inspect(/Users/fabio/playerd/mongoose/node_modules/mongoose/lib/error/validation.js:56:24)
at formatValue(util.js:430:38)
检查时(util.js:324:10)
at格式(util.js:191:12)
在CustomConsole.log(/Users/fabio/playerd/mongoose/node_modules/jest util/build/Console.js:135:53)
在cinema.validate.response(/Users/fabio/playerd/mongoose/cinema.test.js:12:15)
at/Users/fabio/playdy/mongoose/node_modules/mongoose/lib/document.js:1432:5
at/Users/fabio/playdy/mongoose/node_modules/mongoose/lib/document.js:1564:9
at/Users/fabio/playdry/mongoose/node_modules/kareem/index.js:135:16
at _combinedTickCallback(内部/流程/下一步_tick.js:131:7)
在进程中。_tick回调(内部/process/next_tick.js:180:9)
错误:{
容量:猫鼬{
消息:“路径“容量”处的值“saasd”转换为数字失败”,
名称:“卡斯特罗”,
stringValue:““saasd””,
种类:'编号',
值:“saasd”,
路径:“容量”,
理由:[反对]
}
},
_消息:“电影院验证失败”,
名称:“ValidationError”
}
不错。谢谢你的帮助。