Javascript 如何使用Mocha和Unitjs测试需要登录的Sails js控制器?

Javascript 如何使用Mocha和Unitjs测试需要登录的Sails js控制器?,javascript,Javascript,我是测试新手。最近我开发了一个Sails项目。它很好用。但是现在我想为整个项目编写测试用例。我面临的问题是如何首先使用Mocha和unitjs对Sails项目进行身份验证,然后进行测试 我的一个控制器具有显示报告的功能,但只显示给登录的用户。如何为这种逻辑编写测试用例 谢谢你试试这个 var request=require('supertest'); var cookie; request(app) .post('/login') .send({ email: "user@g

我是测试新手。最近我开发了一个Sails项目。它很好用。但是现在我想为整个项目编写测试用例。我面临的问题是如何首先使用Mocha和unitjs对Sails项目进行身份验证,然后进行测试

我的一个控制器具有显示报告的功能,但只显示给登录的用户。如何为这种逻辑编写测试用例

谢谢你试试这个

  var request=require('supertest');
  var cookie;
  request(app)
  .post('/login')
  .send({ email: "user@gluck.com", password:'password' })
  .end(function(err,res){
    res.should.have.status(200);
    cookie = res.headers['set-cookie'];
    done();        
  });

  //
  // and use the cookie on the next request
  request(app)
  .get('/v1/your/path')
  .set('cookie', cookie)
  .end(function(err,res){  
    res.should.have.status(200);
    done();        
  });

谢谢

在测试环境中,您可以使用Cookies保存会话信息。您可以查看我关于Sails、Mocha和supertest的饼干使用要点示例:
对于帆船1.0,以下工作:

首先,确保您定义了自己的测试环境,在该环境中禁用
csrf

  security: {
    csrf: false
  }
如果不这样做,您将无法在测试中进行身份验证并接收
403
错误

或者(如果您确实使用临时数据库进行测试,如内存数据库),在
lifecycle.test.js
文件的回调中创建一个用户,您可以在此处找到注释
,然后加载装置等。

await User.createEach([
  { id: 123123, emailAddress: 'tester@myapp.com', fullName: 'Tester 1', isSuperAdmin: true, password: await sails.helpers.passwords.hashPassword('abc123') },
]);
然后以以下方式执行测试(使用承诺):


这样,您首先向测试用户进行身份验证,然后向该用户执行测试功能。

试试这个,var request=require('supertest');var-cookie;请求(应用程序).post('/login').send({电子邮件:user@gluck.com结束(函数(err,res){res.should.have.status(200);cookie=res.headers['set-cookie'];done();});///并在下一个请求(app)中使用cookie.get('/v1/your/path').set('cookie',cookie.end(函数(err,res){res.should.have.status(200);done();});我发现这是因为该指令起作用了,如果我将set设置为cookie变量并尝试在其外部访问它,由于某种原因显示未定义,我确实将其设置为全局的,但sails.sid只是字符串的一部分,并且其中包含多个部分,这不重要吗?@Vikranth抱歉,我不理解您的问题。你能解释得更详细一点吗?不,我明白了,这是一个奇怪的疑问,但我明白了。非常感谢。
var supertest = require('supertest');

const login = { emailAddress: 'tester@myapp.com', password: 'abc123' };

describe('This is my test', () => {

  describe('#sampleTest()', () => {
    it('should perform my action without error', () => {
      var cookie;
      return supertest(sails.hooks.http.app)
      .put('/api/v1/entrance/login')
      .send(login)
      .expect(200)
      .then(response => {
        cookie = response.headers['set-cookie'];

        // Here comes what you really want to test
        return supertest(sails.hooks.http.app)
        .put('/api/v1/mycontroller/action/123')
        .set('cookie', cookie)
        .send()
        .expect(200);
      }).catch(err => {
        console.log(err);
        throw err;
      });
    });
  });
});