如果我需要在所有测试之前提交登录表单,我该如何使用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();
});
});
});
});
答案 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();
});
});
});