无法访问集成测试中的 Sails.js 应用实例



我正在尝试用sailsjs编写一些集成测试。我有一个bootstrap.test.js文件,按照文档的建议,在全局之前提升我的服务器。

在我的集成测试中,当我试图通过我的帆应用到超测试时,我得到一个错误:

app is not defined
agent = request.agent(app.hooks.http.app);
                      ^

bootstrap.test.js

var Sails = require('sails'),
  Barrels = require('barrels'),
  app;
before(function(done) {
  console.log('Global before hook'); // Never called?
  this.timeout(5000);
  Sails.lift({
    log: {
      level: 'error'
    },
    models: {
      connection: 'test',
      migrate: 'drop'
    }
  }, function(err, sails) {
    app = sails;
    if (err) return done(err);
    var barrels = new Barrels();
    fixtures = barrels.data;
    barrels.populate(function(err) {
      done(err, sails);
    });
  });
});
// Global after hook
after(function (done) {
  console.log(); // Skip a line before displaying Sails lowering logs
  Sails.lower(done);
});

集成测试

var chai = require('chai'),
  expect = chai.expect,
  request = require('supertest'),
  agent = request.agent(app.hooks.http.app);
describe('Species CRUD test', function() {
  it('should not allow an unauthenticated user create a species', function(done){
    var species = {
      scientificName: 'Latin name',
      commonName: 'Common name',
      taxon: 'Amphibian',
      leadOffice: 'Vero Beach',
      range: ['Florida', 'Georgia']
    };
    agent.post('species')
      .send(species)
      .end(function(err, species) {
        expect(err).to.exist;
        expect(species).to.not.exist;
        done();
      });
  });
});

几天来我一直在努力使集成测试工作。这似乎在我的环境中工作得很好。也许你可以试一试。

bootstrap.test.js

var Sails = require('sails');
var sails;
before(function(done)
{
  Sails.lift({
    log: {
        level: 'error'
      },
    connections: {
      testDB: {
        adapter: 'sails-memory'
      }
    },
    connection: 'testDB',
  }, function(err, server)
  {
    sails = server;
    if (err) return done(err);
    done(err, sails);
  });
});
after(function(done)
{
  Sails.lower(done);
});

 var request = require('supertest');
 it('should return all users', function(done){
   request(sails.hooks.http.app)
     .get('/user)
     .expect(200)
     .expect('Content-Type', /json/)
     .end(function(err, res){
        // check the response
        done();
     );
 }

我把bootstrap.test.js放在我的test文件夹的根目录下,然后使用mocha运行测试。

mocha test/bootstrap.test.js test/**/*.test.js

似乎从版本3。删除了mocha的X, nodejs的全局变量功能。所以如果你需要它,你应该像这样把它传递给你的环境:

mocha --globals global test/bootstrap.test.js test/**/*.test.js

或在你的摩卡里。opt文件:

 #test/mocha.opts
 --globals global

最新更新