2017-06-16 48 views
1

我想測試使用Sequelize作爲ORM和Mocha/Chai進行單元測試的mysql數據庫的CRUD操作。我使用http路由測試了記錄的插入/刪除,但我會直接測試模型而不使用任何http連接。我試圖做到這一點,但是當我啓動測試時不添加記錄,並且我沒有收到任何錯誤。使用摩卡和Sequelize的測試模型

應用程序/模型/ article.js

module.exports = function (sequelize, DataTypes) { 

    var Article = sequelize.define('Article', { 
    title: DataTypes.STRING, 
    url: DataTypes.STRING, 
    text: DataTypes.STRING 
    }, { 
    classMethods: { 
     associate: function (models) { 
     // example on how to add relations 
     // Article.hasMany(models.Comments); 
     } 
    } 
    }); 

    return Article; 
}; 

應用程序/模型/ index.js

var fs = require('fs'), 
    path = require('path'), 
    Sequelize = require('sequelize'), 
    config = require('../../config/config'), 
    db = {}; 

var sequelize = new Sequelize(config.db); 

fs.readdirSync(__dirname).filter(function (file) { 
    return (file.indexOf('.') !== 0) && (file !== 'index.js'); 
}).forEach(function (file) { 
    var model = sequelize['import'](path.join(__dirname, file)); 
    db[model.name] = model; 
}); 

Object.keys(db).forEach(function (modelName) { 
    if ('associate' in db[modelName]) { 
    db[modelName].associate(db); 
    } 
}); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

module.exports = db; 

測試/模型/ article.js

'use strict'; 

var expect = require('chai').expect; 

var db = require('../../../app/models'); 
var Article = db.Article; 

describe('article', function() { 
    it('should load', function (done) { 
    Article.create({ 
     title: 'Titolo', 
     url: 'URL', 
     text: 'TEXT' 
    }); 
    done(); 
    }); 
}); 
E,

回答

3

E ither使用異步或承諾確保操作完成。

describe('article', function() { it('should load', function (done) { Article.create({ title: 'Titolo', url: 'URL', text: 'TEXT' }).then(function (article) { // do some tests on article here done(); }); }); });