在所有测试之前发布表格chai mocha

时间:2016-09-22 13:50:34

标签: node.js tdd mocha chai

如果我需要在所有测试之前提交登录表单,我该如何使用chai和mocha;

我已经查看过beforeEach函数,但似乎无法使其正常工作

var chai = require('chai');
var chaiHttp = require('chai-http');
var app = require('../app');
var should = chai.should();
var expect = chai.expect;
chai.use(chaiHttp);

var username = 't@t.com';
var password = 'test';

before(function() {

it('should login with details to login form / POST', function(done) {
    var request = chai.request(app);
    request
        .post('/session/new')
        .field('email', username)
        .field('password', password)
        .end(function(err, res) {
            res.should.have.status(200);
            res.should.be.html;
            done();
        });
});
describe('Vouchers', function() {
    it('should list ALL vouchers on / GET', function(done) {
        var request = chai.request(app);
        request
            .get('/vouchers')
            .end(function(err, res) {
                res.should.have.status(200);
                res.text.should.match(/Welcome to the Voucher Homepage/);
                res.should.be.html;
                done();
            });
    });
});
});

2 个答案:

答案 0 :(得分:0)

您无法将it放入before挂钩中。我试过看看会发生什么并得到各种结果。你这样做的行为是未定义的。

查看您的代码,看起来您希望第一个it中的代码初始化状态,然后让describe中的内容运行。为此,只需打开您放在第一个it中的代码,然后将其作为before挂钩的正文。由于chai-http产生了承诺,您应该能够返回您生成的请求。所以这应该有效:

before(function() {
    var request = chai.request(app);
    return request
        .post('/session/new')
        .field('email', username)
        .field('password', password)
        .end(function(err, res) {
            res.should.have.status(200);
            res.should.be.html;
        });
});

答案 1 :(得分:0)

正如罗伊斯已经说过的那样,你不能把它放在前钩子里面。一个前,应该进入describere。

describe('Vouchers', function () {
    before(function () {
        var request = chai.request(app);
        return request
            .post('/session/new')
            .field('email', username)
            .field('password', password)
            .end(function (err, res) {
                res.should.have.status(200);
                res.should.be.html;
            });
    });

    it('should list ALL vouchers on / GET', function (done) {
        var request = chai.request(app);
        request
            .get('/vouchers')
            .end(function (err, res) {
                res.should.have.status(200);
                res.text.should.match(/Welcome to the Voucher Homepage/);
                res.should.be.html;
                done();
            });
    });
});