0
試圖圍繞這一點我的頭,它把我的思想在異步循環。異步與RethinkDB和柴
運行這個簡單的測試後,手動檢查RethinkDB的結果是否正確(db'test'中名爲'books'的一個表);不過,無論我在chai的expect
函數中聲明瞭什麼,該測試都會通過。我知道這是一個異步問題,因爲測試完成後console.log(result)
會打印到控制檯。我認爲expect
會在Rethink得到tableList()
之後運行,因爲它在回調中。
- 這是爲什麼檢驗合格(應該失敗,其中
['books'] === ['anything']
? - 爲什麼不
expect()
運行後tableList()
? - ,使它們按順序執行什麼是連鎖命令RethinkDB的正確方法?
db_spec.js:
import {expect} from 'chai'
import r from 'rethinkdb'
describe('rethinkdb',() => {
it('makes a connection',() => {
var connection = null;
r.connect({host: 'localhost', port: 28015}, function(err, conn) {
if (err) throw err
connection = conn
r.dbDrop('test').run(connection,() => {
r.dbCreate('test').run(connection,() => {
r.db('test').tableCreate('books').run(connection,() => {
r.db('test').tableList().run(connection, (err, result) => {
if (err) throw err
console.log(result)
expect(result).to.equal(['anything'])
})
})
})
})
})
})
})
我相信你應該使用'expect(result).to.deep.equal(...)'。直接比較Javascript中的數組並不那麼簡單。 – Tryneus
至於異步問題,你的測試用例沒有采用'done'回調,所以框架假設你的測試是同步的。爲了解決這個問題,測試用例聲明應該是'it('建立連接',(done)=> ...)',並且你應該在'expect'後面調用'done()'。 – Tryneus
@Tryneus謝謝。查看修改後的代碼。還有一些問題。 – RichardForrester