Frisby/Jest не показывает название поля, вызвавшего ошибку
Я написал свой первый тест, используя Фрисби, и у меня было странное поведение.
Это часть моего тестового файла:
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 не знает имени поля. Но шутка есть, поэтому она должна показывать правильное имя поля, вызывающего ошибку.
Я что-то пропустил?