2015-04-24 10:10:34 -04:00
|
|
|
'use strict';
|
|
|
|
var tape = require('tape')
|
|
|
|
var Promise = require('bluebird')
|
2015-04-24 15:20:35 -04:00
|
|
|
var debug = require('debug')('knex:tests')
|
2015-04-24 10:10:34 -04:00
|
|
|
|
|
|
|
module.exports = function(tableName, knex) {
|
2016-03-08 08:41:13 +01:00
|
|
|
|
2015-04-24 15:20:35 -04:00
|
|
|
return function(name, dialects, cb) {
|
2016-03-08 08:41:13 +01:00
|
|
|
|
2015-04-24 15:20:35 -04:00
|
|
|
if (arguments.length === 2) {
|
|
|
|
cb = dialects
|
|
|
|
} else {
|
|
|
|
if (!Array.isArray(dialects)) {
|
|
|
|
dialects = [dialects]
|
|
|
|
}
|
|
|
|
if (dialects.indexOf(knex.client.dialect) === -1) {
|
|
|
|
debug('Skipping dialect ' + knex.client.dialect + ' for test ' + name)
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-04-24 10:10:34 -04:00
|
|
|
return tape(name, function(t) {
|
2016-03-08 08:41:13 +01:00
|
|
|
|
2015-04-24 10:10:34 -04:00
|
|
|
var hasPlanned = false
|
2016-03-08 08:41:13 +01:00
|
|
|
|
2015-04-24 10:10:34 -04:00
|
|
|
t.on('plan', function() { hasPlanned = true })
|
|
|
|
|
|
|
|
var disposable = Promise.resolve(true).disposer(function() {
|
|
|
|
return knex.truncate(tableName).finally(function() {
|
|
|
|
t.end()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Promise.using(disposable, function() {
|
|
|
|
var val = cb(t)
|
|
|
|
if (val && typeof val.then === 'function') {
|
|
|
|
return val.catch(function(err) {
|
|
|
|
t.error(err)
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
t.error(new Error('A promise should be returned to test ' + name))
|
|
|
|
t.end()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-09-13 18:12:23 -04:00
|
|
|
}
|