【问题标题】:Assertion error using ava使用ava的断言错误
【发布时间】:2017-08-05 18:01:34
【问题描述】:

首先我的英语不好,但这次测试对我来说失败了。

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)
}

这个函数的作用是,如果它没有在数据库中获取用户,那么它会返回一个拒绝承诺并且它确实发生了,但是之后我不知道会发生什么

【问题讨论】:

    标签: ava


    【解决方案1】:

    我假设db.getUser('foo') 返回一个Promise,所以你需要await t.throws 断言:

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

    【讨论】:

    • 这解决了我的问题。声明前没有 await 这个词
    【解决方案2】:

    如果您将t.throws 行移到t.is(function) 之后,则代码将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2018-05-19
      • 2014-09-27
      相关资源
      最近更新 更多