我使用 Frisby 编写了我的第一个测试,但我得到了一个奇怪的行为。
这是我的测试文件的一部分:
it('check function', function (done) {
frisby.get(BASE_URL + 'check')
.expect('status', 200)
.done(done);
});
it('user login', function (done) {
frisby.post(BASE_URL + 'login', user)
.expect('status', 200)
.expect('jsonTypes', 'id', Joi.number().required())
.expect('jsonTypes','email', Joi.string().email().required())
.expect('json','emailConfirmed', 1)
.expect('jsonTypes','name', Joi.string().required())
.expect('jsonTypes','surname', Joi.string().required())
.expect('jsonTypes','avatar', Joi.string())
.expect('jsonTypes','city', Joi.string().required())
.expect('jsonTypes','token', Joi.string().required())
.expect('json','role', 'user')
.done(done);
});
它工作正常!
如果我改变这一行
.expect('jsonTypes','name', Joi.string().required())
与以下一个
.expect('jsonTypes','name', Joi.number().required())
我得到这个输出
● user login
ValidationError: "value" must be a number
at Object.<anonymous>.exports.process (node_modules/joi/lib/errors.js:152:19)
at Object.<anonymous>.internals.Number.Object.<anonymous>.internals.Any._validateWithOptions (node_modules/joi/lib/any.js:633:27)
at Object.<anonymous>.module.exports.internals.Any.root.validate (node_modules/joi/lib/index.js:104:23)
at jsonTypesAssertion (node_modules/frisby/src/frisby/expects.js:104:24)
at Object.withPath (node_modules/frisby/src/frisby/utils.js:67:12)
at FrisbySpec.jsonTypes (node_modules/frisby/src/frisby/expects.js:103:11)
at FrisbySpec._addExpect.response (node_modules/frisby/src/frisby/spec.js:368:23)
at FrisbySpec._runExpects (node_modules/frisby/src/frisby/spec.js:260:24)
at _fetch.fetch.then.then.responseBody (node_modules/frisby/src/frisby/spec.js:139:14)
at process._tickCallback (internal/process/next_tick.js:109:7)
我应该期望收到
"name" must be a number
为了立即识别我的 API 中的错误。
此外,如果我更改我的 API 删除字段“名称”,我会得到这个输出
● user login
ValidationError: "value" is required
似乎 Jest 显示了 Joi 输出,而 Joi 不知道字段名称。但是 jest 确实如此,因此它应该显示导致错误的字段的正确名称。
我错过了什么吗?