[英]Howto make a unit test with rollback using express, sequelize, mocha and supertests
我正在嘗試進行將數據插入數據庫的測試,使用supertest測試請求,然后使用假數據進行回滾。 有人知道這種方式是否正確嗎? 如果不是,請您回答並告訴我哪種方法正確? 提前致謝。
...
var app = express();
var request = require('supertest');
var assert = require("assert");
var db = require('../../models');
var mysql = require('mysql');
describe('[Test controller - send_confirmation_email.js]', function () {
describe('POST /crowdfunding/sendConfirmationEmail', function () {
it('Second post test with data', function (done) {
db.sequelize.transaction(function (t) {
var cf = db.Crowdfunding.build({
money_raised: 80,
project_id: 999,
country: 'germany',
type: 'SONG',
state: 'PENDING'
});
cf.save({ transaction: t }).success(function (cf) {
request(app)
.post('/crowdfunding/sendConfirmationEmail')
.send({
'id': cf.id,
'text': 'test text'
})
// .expect(500)
.end(function (err, res) {
assert.equal('PENDING', cf.state);
t.rollback();
done();
});
}).error(function () { });
});
});
});
});
看起來您的想法正確,但是圍繞事務的控制流時序不正確。 這里有一些技巧。
done
回調的before
處理程序中,直到在cf.save().success(
回調內部cf.save().success(
才調用done
。這將確保在開始測試邏輯之前完成事務的保存。 t.rollback();
到after
發送測試請求之前處理程序或該交易將回滾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.