Ошибка подтверждения с помощью ava

Сначала мой английский не очень хорош, но этот тест не прошел для меня.

test('get user', async t => {
  let db = t.context.db

  t.is(typeof db.getUser, 'function', 'getUser is a function')

  let user = fixtures.getUser()
  let created = await db.saveUser(user)
  let result = await db.getUser(user.username)

  t.deepEqual(created, result)

  // t.throws(db.getUser('foo'), /not found/)
})

и верни это

1 failed

db-test » get user

Test finished, but an assertion is still pending

Если я удалю строку

t.throws(db.getUser('foo'), /not found/)

Тест проходит без проблем.

Проверенная функция это

getUser (username, callback) {
  if (!this.connected) {
    return Promise.reject(new Error('not connected')).asCallback(callback)
  }

  let connection = this.connection
  let db = this.db

  let tasks = co.wrap(function * () {
    let conn = yield connection

    yield r.db(db).table('users').indexWait().run(conn)
    let users = yield r.db(db).table('users').getAll(username, {
      index: 'username'
    }).run(conn)

    let result = null

    try {
      result = yield users.next()
    } catch (e) {
      return Promise.reject(new Error(`user ${username} not found`))
    }

    return Promise.resolve(result)
  })

  return Promise.resolve(tasks()).asCallback(callback)
}

Функция делает то, что, если она не получает пользователя в базе данных, она возвращает обещание отклонения, и это действительно происходит, но потом я не знаю, что происходит

2 ответа

Решение

Я предполагаю db.getUser('foo') возвращает обещание, поэтому вам нужно await t.throws утверждение:

await t.throws(db.getUser('foo'), /not found/)

Если вы переместите t.throws линия сразу после t.is(function)тогда код будет работать.

Другие вопросы по тегам