不要怂,就是干,撸起袖子干!

Commit a59c409e by Sascha Depold

don't execute tests for every dialect but only for one per test run

1 parent 28f334e9
# v1.6.0 # # v1.6.0 #
- [DEPENDENCIES] upgraded most dependencies. most important: mysql was upgraded to 2.0.0-alpha-3 - [DEPENDENCIES] upgraded most dependencies. most important: mysql was upgraded to 2.0.0-alpha-3
- [REFACTORING] separated tests for dialects
- [BUG] fixed wrong version in sequelize binary - [BUG] fixed wrong version in sequelize binary
- [FEATURE] added association prefetching for find and findAll - [FEATURE] added association prefetching for find and findAll
- [FEATURE] it's now possible to use callbacks of async functions inside migrations (thanks to mphilpot) - [FEATURE] it's now possible to use callbacks of async functions inside migrations (thanks to mphilpot)
- [FEATURE] improved comfort of sequelize.query. just pass an sql string to it and wait for the result - [FEATURE] improved comfort of sequelize.query. just pass an sql string to it and wait for the result
- [FEATURE] Migrations now understand NODE_ENV (thanks to gavri) - [FEATURE] Migrations now understand NODE_ENV (thanks to gavri)
- [FEATURE]
# v1.5.0 # # v1.5.0 #
- [REFACTORING] use underscore functions for Utils.isHash (thanks to Mick-Hansen/innofluence) - [REFACTORING] use underscore functions for Utils.isHash (thanks to Mick-Hansen/innofluence)
......
...@@ -48,7 +48,10 @@ ...@@ -48,7 +48,10 @@
"scripts": { "scripts": {
"test": "npm run test-jasmine && npm run test-buster", "test": "npm run test-jasmine && npm run test-buster",
"test-jasmine": "./node_modules/.bin/jasmine-node spec-jasmine/", "test-jasmine": "./node_modules/.bin/jasmine-node spec-jasmine/",
"test-buster": "./node_modules/.bin/buster-test", "test-buster": "npm run test-buster-mysql && npm run test-buster-postgres && npm run test-buster-sqlite",
"test-buster-mysql": "DIALECT=mysql ./node_modules/.bin/buster-test",
"test-buster-postgres": "DIALECT=postgres ./node_modules/.bin/buster-test",
"test-buster-sqlite": "DIALECT=sqlite ./node_modules/.bin/buster-test",
"generate-docs": "node_modules/.bin/dox-foundation --source ./lib --title Sequelize" "generate-docs": "node_modules/.bin/dox-foundation --source ./lib --title Sequelize"
}, },
"bin": { "bin": {
......
...@@ -2,45 +2,43 @@ if (typeof require === 'function') { ...@@ -2,45 +2,43 @@ if (typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, Sequelize = require('../../index') , Sequelize = require('../../index')
, dialects = Helpers.getSupportedDialects() , dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 500 buster.testRunner.timeout = 500
dialects.forEach(function(dialect) { describe("[" + dialect.toUpperCase() + "] BelongsTo", function() {
describe('BelongsTo@' + dialect, function() { before(function(done) {
before(function(done) { Helpers.initTests({
Helpers.initTests({ beforeComplete: function(sequelize) {
beforeComplete: function(sequelize) { this.sequelize = sequelize
this.sequelize = sequelize }.bind(this),
}.bind(this), onComplete: done
onComplete: done
})
}) })
})
describe('setAssociation', function() { describe('setAssociation', function() {
it('clears the association if null is passed', function(done) { it('clears the association if null is passed', function(done) {
var User = this.sequelize.define('User', { username: Sequelize.STRING }) var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING }) , Task = this.sequelize.define('Task', { title: Sequelize.STRING })
Task.belongsTo(User) Task.belongsTo(User)
this.sequelize.sync({ force: true }).success(function() { this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) { User.create({ username: 'foo' }).success(function(user) {
Task.create({ title: 'task' }).success(function(task) { Task.create({ title: 'task' }).success(function(task) {
task.setUser(user).success(function() { task.setUser(user).success(function() {
task.getUser().success(function(user) { task.getUser().success(function(user) {
expect(user).not.toEqual(null) expect(user).not.toEqual(null)
task.setUser(null).success(function() { task.setUser(null).success(function() {
task.getUser().success(function(user) { task.getUser().success(function(user) {
expect(user).toEqual(null) expect(user).toEqual(null)
done() done()
})
}) })
}) })
}) })
}) })
}) })
......
...@@ -2,46 +2,44 @@ if (typeof require === 'function') { ...@@ -2,46 +2,44 @@ if (typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, Sequelize = require("../../index") , Sequelize = require("../../index")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialects = Helpers.getSupportedDialects() , dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 500 buster.testRunner.timeout = 500
dialects.forEach(function(dialect) { describe("[" + dialect.toUpperCase() + "] HasOne", function() {
describe('HasOne@' + dialect, function() { before(function(done) {
before(function(done) { var self = this
var self = this
Helpers.initTests({ Helpers.initTests({
dialect: dialect, dialect: dialect,
beforeComplete: function(sequelize) { self.sequelize = sequelize }, beforeComplete: function(sequelize) { self.sequelize = sequelize },
onComplete: done onComplete: done
})
}) })
})
describe('setAssociation', function() { describe('setAssociation', function() {
it('clears the association if null is passed', function(done) { it('clears the association if null is passed', function(done) {
var User = this.sequelize.define('User', { username: Sequelize.STRING }) var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING }) , Task = this.sequelize.define('Task', { title: Sequelize.STRING })
User.hasOne(Task) User.hasOne(Task)
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {
Task.create({ title: 'task' }).success(function(task) {
user.setTask(task).success(function() {
user.getTask().success(function(task) {
expect(task).not.toEqual(null)
user.setTask(null).success(function() {
user.getTask().success(function(task) {
expect(task).toEqual(null)
done()
})
})
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {
Task.create({ title: 'task' }).success(function(task) {
user.setTask(task).success(function() {
user.getTask().success(function(task) {
expect(task).not.toEqual(null)
user.setTask(null).success(function() {
user.getTask().success(function(task) {
expect(task).toEqual(null)
done()
})
}) })
}) })
}) })
}) })
......
...@@ -2,33 +2,31 @@ if (typeof require === 'function') { ...@@ -2,33 +2,31 @@ if (typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, Sequelize = require('../../index') , Sequelize = require('../../index')
, dialects = Helpers.getSupportedDialects() , dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
dialects.forEach(function(dialect) { describe("[" + dialect.toUpperCase() + "] Mixin", function() {
describe('Mixin@' + dialect, function() { before(function(done) {
before(function(done) { Helpers.initTests({
Helpers.initTests({ dialect: dialect,
dialect: dialect, beforeComplete: function(sequelize) {
beforeComplete: function(sequelize) { this.sequelize = sequelize
this.sequelize = sequelize }.bind(this),
}.bind(this), onComplete: done
onComplete: done
})
}) })
})
describe('getAssociation', function() { describe('getAssociation', function() {
it('returns the respective part of the association for 1:1 associations', function() { it('returns the respective part of the association for 1:1 associations', function() {
var User = this.sequelize.define('User', {}) var User = this.sequelize.define('User', {})
var Task = this.sequelize.define('Task', {}) var Task = this.sequelize.define('Task', {})
User.hasOne(Task) User.hasOne(Task)
Task.belongsTo(User) Task.belongsTo(User)
expect(User.getAssociation(Task).target).toEqual(Task) expect(User.getAssociation(Task).target).toEqual(Task)
})
}) })
}) })
}) })
if(typeof require === 'function') { if(typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, dialects = ['sqlite', 'mysql', 'postgres'] , Helpers = require('./buster-helpers')
, Helpers = require('./buster-helpers') , dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
dialects.forEach(function(dialect) { describe("[" + dialect.toUpperCase() + "] DAO", function() {
describe('DAO@' + dialect, function() { before(function(done) {
before(function(done) { var self = this
var self = this
Helpers.initTests({ Helpers.initTests({
dialect: dialect, dialect: dialect,
beforeComplete: function(sequelize, DataTypes) { beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
username: { type: DataTypes.STRING }, username: { type: DataTypes.STRING },
touchedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, touchedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
aNumber: { type: DataTypes.INTEGER } aNumber: { type: DataTypes.INTEGER }
}) })
}, },
onComplete: function(sequelize) { onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
} }
})
}) })
})
describe('default values', function() { describe('default values', function() {
describe('current date', function() { describe('current date', function() {
it('should store a date in touchedAt', function() { it('should store a date in touchedAt', function() {
var user = this.User.build({ username: 'a user'}) var user = this.User.build({ username: 'a user'})
expect(user.touchedAt instanceof Date).toBeTrue() expect(user.touchedAt instanceof Date).toBeTrue()
}) })
it("should store the current date in touchedAt", function() { it("should store the current date in touchedAt", function() {
this.useFakeTimers().tick(5000) this.useFakeTimers().tick(5000)
var user = this.User.build({ username: 'a user'}) var user = this.User.build({ username: 'a user'})
expect(+user.touchedAt).toBe(5000) expect(+user.touchedAt).toBe(5000)
})
}) })
}) })
})
describe('complete', function() { describe('complete', function() {
it("gets triggered if an error occurs", function(done) { it("gets triggered if an error occurs", function(done) {
this.User.find({ where: "asdasdasd" }).complete(function(err, result) { this.User.find({ where: "asdasdasd" }).complete(function(err, result) {
expect(err).toBeDefined() expect(err).toBeDefined()
expect(err.message).toBeDefined() expect(err.message).toBeDefined()
done() done()
})
}) })
})
it("gets triggered if everything was ok", function(done) { it("gets triggered if everything was ok", function(done) {
this.User.count().complete(function(err, result) { this.User.count().complete(function(err, result) {
expect(err).toBeNull() expect(err).toBeNull()
expect(result).toBeDefined() expect(result).toBeDefined()
done() done()
})
}) })
}) })
})
describe('save', function() { describe('save', function() {
it('takes zero into account', function(done) { it('takes zero into account', function(done) {
this.User.build({ aNumber: 0 }).save([ 'aNumber' ]).success(function(user) { this.User.build({ aNumber: 0 }).save([ 'aNumber' ]).success(function(user) {
expect(user.aNumber).toEqual(0) expect(user.aNumber).toEqual(0)
done() done()
})
}) })
}) })
})
describe('toJSON', function toJSON() { describe('toJSON', function toJSON() {
before(function(done) { before(function(done) {
this.User = this.sequelize.define('UserWithUsernameAndAgeAndIsAdmin', { this.User = this.sequelize.define('UserWithUsernameAndAgeAndIsAdmin', {
username: Helpers.Sequelize.STRING, username: Helpers.Sequelize.STRING,
age: Helpers.Sequelize.INTEGER, age: Helpers.Sequelize.INTEGER,
isAdmin: Helpers.Sequelize.BOOLEAN isAdmin: Helpers.Sequelize.BOOLEAN
}, { }, {
timestamps: false, timestamps: false,
logging: true logging: true
})
this.User.sync({ force: true }).success(done)
}) })
it('returns an object containing all values', function() { this.User.sync({ force: true }).success(done)
var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true }) })
expect(user.toJSON()).toEqual({ username: 'test.user', age: 99, isAdmin: true, id: null })
})
it('returns a response that can be stringified', function() { it('returns an object containing all values', function() {
var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true }) var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true })
expect(JSON.stringify(user)).toEqual('{"username":"test.user","age":99,"isAdmin":true,"id":null}') expect(user.toJSON()).toEqual({ username: 'test.user', age: 99, isAdmin: true, id: null })
}) })
it('returns a response that can be stringified and then parsed', function() { it('returns a response that can be stringified', function() {
var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true }) var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true })
expect(JSON.parse(JSON.stringify(user))).toEqual({ username: 'test.user', age: 99, isAdmin: true, id: null }) expect(JSON.stringify(user)).toEqual('{"username":"test.user","age":99,"isAdmin":true,"id":null}')
}) })
it('returns a response that can be stringified and then parsed', function() {
var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true })
expect(JSON.parse(JSON.stringify(user))).toEqual({ username: 'test.user', age: 99, isAdmin: true, id: null })
}) })
}) })
}) })
...@@ -2,13 +2,14 @@ if(typeof require === 'function') { ...@@ -2,13 +2,14 @@ if(typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, QueryChainer = require("../lib/query-chainer") , QueryChainer = require("../lib/query-chainer")
, CustomEventEmitter = require("../lib/emitters/custom-event-emitter") , CustomEventEmitter = require("../lib/emitters/custom-event-emitter")
, Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
describe("[" + dialect.toUpperCase() + "] QueryChainer", function() {
describe('QueryChainer', function() {
before(function() { before(function() {
this.queryChainer = new QueryChainer() this.queryChainer = new QueryChainer()
}) })
......
if(typeof require === 'function') { if(typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
describe('Sequelize', function() { describe("[" + dialect.toUpperCase() + "] Sequelize", function() {
before(function(done) { before(function(done) {
Helpers.initTests({ Helpers.initTests({
beforeComplete: function(sequelize) { this.sequelize = sequelize }.bind(this), beforeComplete: function(sequelize) { this.sequelize = sequelize }.bind(this),
...@@ -44,7 +46,7 @@ describe('Sequelize', function() { ...@@ -44,7 +46,7 @@ describe('Sequelize', function() {
}) })
}) })
it('executes a query if only the sql is passed', function(done) { it('//executes a query if only the sql is passed', function(done) {
this.sequelize.query(this.insertQuery).success(function(result) { this.sequelize.query(this.insertQuery).success(function(result) {
expect(result).toBeNull() expect(result).toBeNull()
done() done()
......
if(typeof require === 'function') { if(typeof require === 'function') {
const buster = require("buster") const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect()
} }
buster.spec.expose() buster.spec.expose()
describe('DAO@sqlite', function() { if (dialect === 'sqlite') {
before(function(done) { describe('[SQLITE] DAO', function() {
var self = this before(function(done) {
var self = this
Helpers.initTests({ Helpers.initTests({
dialect: 'sqlite', dialect: 'sqlite',
beforeComplete: function(sequelize, DataTypes) { beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
username: DataTypes.STRING username: DataTypes.STRING
}) })
}, },
onComplete: function(sequelize) { onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
} }
})
}) })
})
describe('findAll', function() { describe('findAll', function() {
it("handles dates correctly", function(done) { it("handles dates correctly", function(done) {
var self = this var self = this
this.User this.User
.create({ username: 'user', createdAt: new Date(2011, 04, 04) }) .create({ username: 'user', createdAt: new Date(2011, 04, 04) })
.success(function(oldUser) { .success(function(oldUser) {
self.User self.User
.create({ username: 'new user' }) .create({ username: 'new user' })
.success(function(newUser) { .success(function(newUser) {
self.User.findAll({ self.User.findAll({
where: ['createdAt > ?', new Date(2012, 01, 01)] where: ['createdAt > ?', new Date(2012, 01, 01)]
}).success(function(users) { }).success(function(users) {
expect(users.length).toEqual(1) expect(users.length).toEqual(1)
done() done()
})
}) })
}) })
}) .error(function(err) {
.error(function(err) { console.log(err)
console.log(err) })
}) })
}) })
}) })
}) }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!