Sails.js和Mocha,res.view测试

时间:2015-07-02 21:47:52

标签: node.js sails.js mocha

我为我的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?

2 个答案:

答案 0 :(得分:2)

如果我想测试我的视图,我通常会在测试时使用简单的请求。像这样:

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();
    });
});

答案 1 :(得分:1)

您可以使用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();
    });
});