【问题标题】:Howto make a unit test with rollback using express, sequelize, mocha and supertests如何使用 express、sequelize、mocha 和 supertest 进行回滚单元测试
【发布时间】:2014-11-27 16:19:51
【问题描述】:

我正在尝试将数据插入数据库进行测试,使用 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 () { });

            });    
        });    
    });    
});

【问题讨论】:

    标签: node.js express mocha.js sequelize.js supertest


    【解决方案1】:

    看起来您的想法是正确的,但是围绕事务的控制流时间安排不正确。这里有一些提示。

    • 将事务设置移动到带有done 回调的before 处理程序,并且在cf.save().success( 回调内部之前不要调用done。这将确保事务在开始测试逻辑之前完成保存。
    • t.rollback(); 移动到after 处理程序,否则事务将在发送测试请求之前回滚。
    • 不要忘记断言请求成功,没有错误和 200 级状态代码

    【讨论】:

    • 谢谢,非常清楚。现在的问题是,当我正在执行请求的控制器找不到数据时,因为它只存在于事务中......不知道如何解决这个问题。
    • 只在'before'中真实保存并在'after'中删除它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2016-06-05
    • 1970-01-01
    • 2015-06-02
    • 2021-08-15
    • 2013-01-23
    相关资源
    最近更新 更多