带有 db-migrate 的 Mocha 无法完成测试
Mocha with db-migrate fails to complete tests
我在弄清楚如何正确测试这段代码时遇到了一些困难:
const chai = require('chai')
const chaiHttp = require('chai-http')
const restify = require('restify')
const errs = require('restify-errors')
const expect = chai.expect
chai.use(chaiHttp)
const willerror = true
const server = restify.createServer()
server.get('/', function (req, res, next) {
if (!willerror) res.send()
next(willerror ? new errs.InternalServerError() : null)
})
describe('Server test', function () {
before(async function () {
const c = {config: {dev: {driver: 'sqlite3', filename: ':memory:'}}}
const dbm = require('db-migrate').getInstance(true, c)
dbm.silence(true)
await dbm.reset().then(() => dbm.up('all', 'all'))
})
after(function (done) {
server.close(done)
})
it('posts', function (done) {
const client = chai.request(server)
client.get('/')
.end((err, res) => {
expect(err).to.be.null
expect(res).to.have.status(200)
done()
})
})
})
(注意:至少需要迁移一次,但可以为空:db-migrate create one
应该足够了)。
我得到的输出:
删除 before()
调用的内容(只留下 before(async function(){})
)得到了我期望的结果:
为什么这些测试没有完成?
原来是 db-migrate registers an uncaughtException
handler。
要打败它,请将 throwUncatched: true
添加到传递给 db-migrate
的配置对象中。就我而言:
const c = {throwUncatched: true, config: {dev: {driver: 'sqlite3', filename: ':memory:'}}}
我在弄清楚如何正确测试这段代码时遇到了一些困难:
const chai = require('chai')
const chaiHttp = require('chai-http')
const restify = require('restify')
const errs = require('restify-errors')
const expect = chai.expect
chai.use(chaiHttp)
const willerror = true
const server = restify.createServer()
server.get('/', function (req, res, next) {
if (!willerror) res.send()
next(willerror ? new errs.InternalServerError() : null)
})
describe('Server test', function () {
before(async function () {
const c = {config: {dev: {driver: 'sqlite3', filename: ':memory:'}}}
const dbm = require('db-migrate').getInstance(true, c)
dbm.silence(true)
await dbm.reset().then(() => dbm.up('all', 'all'))
})
after(function (done) {
server.close(done)
})
it('posts', function (done) {
const client = chai.request(server)
client.get('/')
.end((err, res) => {
expect(err).to.be.null
expect(res).to.have.status(200)
done()
})
})
})
(注意:至少需要迁移一次,但可以为空:db-migrate create one
应该足够了)。
我得到的输出:
删除 before()
调用的内容(只留下 before(async function(){})
)得到了我期望的结果:
为什么这些测试没有完成?
原来是 db-migrate registers an uncaughtException
handler。
要打败它,请将 throwUncatched: true
添加到传递给 db-migrate
的配置对象中。就我而言:
const c = {throwUncatched: true, config: {dev: {driver: 'sqlite3', filename: ':memory:'}}}