我正在尝试将数据插入数据库,使用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 () { });
});
});
});
});
答案 0 :(得分:1)
看起来你的想法是正确的,但是围绕交易的控制流时间是不对的。这里有一些提示。
before
处理程序并使用done
回调,并且在done
回调内部之前不要调用cf.save().success(
。这将确保在开始测试逻辑之前保存事务。t.rollback();
移至after
处理程序,否则交易将在您的测试请求发送之前回滚。