Sails.js 和 Mocha,res.view 测试
Sails.js and Mocha, res.view testing
我为我的 sails 应用程序编写了测试,但在控制器中遇到了一些问题。当用户注册时,我检查重复,如果是 - 呈现错误的表单,如果没有 - 呈现带有成功消息的表单。那么任何人都可以知道如何正确测试它吗?或者你可以建议更好的代码结构,非常感谢。
控制器:
User.findOne({ email: req.body.email }, function(err, user) {
if(err) return res.json(err)
if(!user) {
User.create({email:req.body.email, password:req.body.password}).exec(function createCB(err, user){
if(err) return res.json(err);
res.view('signup', { message: 'Done, user created'})
})
} else
res.view('signup', { message: 'User already exist'})
})
测试:
it('should show error if duplicated user - TODO', function (done) {
request(sails.hooks.http.app)
.post('/signup')
.send({ email: 'test@test.te', password: 'test' })
.expect(200)
.end(done)
})
所以问题是,我该如何测试 res.view?
如果我想测试我的观点,我通常在测试时使用简单的请求。像这样:
it('able to test view', function(done) {
require('request-promise')('http://localhost:1337/')
.then(function(res) {
res.should.contains('Done, user created');
done();
})
.catch(done);
});
它会检查整个正文,是否有我们提供的匹配字符串。记得先做 npm install request-promise --save-dev
(或任何可以提出请求的相关图书馆)。
或者您可以像这样使用 @Yann 提到的 supertest
库
it('should be able to test view', function(done) {
require('supertest')
.agent(sails.hooks.http.app)
.post('/signup')
.send({ email: 'test@test.te', password: 'test' })
.expect(200)
.end(function(err, res) {
should.not.exist(err);
res.should.contains('Done, user created');
return done();
});
});
您可以使用 supertest 这样的库来执行 HTTP 请求:
it('should be able to test view', function(done) {
require('supertest')
.agent(sails.hooks.http.app)
.post('/signup')
.send({ email: 'test@test.te', password: 'test' })
.expect(200)
.end(function(err, res) {
should.not.exist(err);
res.should.contains('Done, user created');
return done();
});
});
我为我的 sails 应用程序编写了测试,但在控制器中遇到了一些问题。当用户注册时,我检查重复,如果是 - 呈现错误的表单,如果没有 - 呈现带有成功消息的表单。那么任何人都可以知道如何正确测试它吗?或者你可以建议更好的代码结构,非常感谢。
控制器:
User.findOne({ email: req.body.email }, function(err, user) {
if(err) return res.json(err)
if(!user) {
User.create({email:req.body.email, password:req.body.password}).exec(function createCB(err, user){
if(err) return res.json(err);
res.view('signup', { message: 'Done, user created'})
})
} else
res.view('signup', { message: 'User already exist'})
})
测试:
it('should show error if duplicated user - TODO', function (done) {
request(sails.hooks.http.app)
.post('/signup')
.send({ email: 'test@test.te', password: 'test' })
.expect(200)
.end(done)
})
所以问题是,我该如何测试 res.view?
如果我想测试我的观点,我通常在测试时使用简单的请求。像这样:
it('able to test view', function(done) {
require('request-promise')('http://localhost:1337/')
.then(function(res) {
res.should.contains('Done, user created');
done();
})
.catch(done);
});
它会检查整个正文,是否有我们提供的匹配字符串。记得先做 npm install request-promise --save-dev
(或任何可以提出请求的相关图书馆)。
或者您可以像这样使用 @Yann 提到的 supertest
库
it('should be able to test view', function(done) {
require('supertest')
.agent(sails.hooks.http.app)
.post('/signup')
.send({ email: 'test@test.te', password: 'test' })
.expect(200)
.end(function(err, res) {
should.not.exist(err);
res.should.contains('Done, user created');
return done();
});
});
您可以使用 supertest 这样的库来执行 HTTP 请求:
it('should be able to test view', function(done) {
require('supertest')
.agent(sails.hooks.http.app)
.post('/signup')
.send({ email: 'test@test.te', password: 'test' })
.expect(200)
.end(function(err, res) {
should.not.exist(err);
res.should.contains('Done, user created');
return done();
});
});