1

我使用 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 确实如此,因此它应该显示导致错误的字段的正确名称。

我错过了什么吗?

4

0 回答 0