Node.js Sails.js和Mocha:使用supertest创建新模型

Node.js Sails.js和Mocha:使用supertest创建新模型,node.js,unit-testing,express,sails.js,supertest,Node.js,Unit Testing,Express,Sails.js,Supertest,我目前正在为我的Sails应用程序设置测试基础设施,在我尝试使用supertest测试API请求之前,它一直进展顺利 我正在尝试测试我的一些控制器方法(我实现了这些方法,而不是使用默认的蓝图路由),但似乎API请求甚至没有通过。我认为这是因为我可以运行npm测试,并且这段代码可以正常运行,但是如果我将POST路径更改为/datamodel/create5,其中create5()不作为控制器方法存在,它仍然可以正常运行。。。在这两种情况下,都不会创建数据模型。我在下面包含了一些代码 这就是我的代码

我目前正在为我的Sails应用程序设置测试基础设施,在我尝试使用
supertest
测试API请求之前,它一直进展顺利

我正在尝试测试我的一些控制器方法(我实现了这些方法,而不是使用默认的蓝图路由),但似乎API请求甚至没有通过。我认为这是因为我可以运行
npm测试
,并且这段代码可以正常运行,但是如果我将POST路径更改为
/datamodel/create5
,其中
create5()
不作为控制器方法存在,它仍然可以正常运行。。。在这两种情况下,都不会创建数据模型。我在下面包含了一些代码

这就是我的代码的样子:

var request = require('supertest');
var assert = require('assert');
var async = require('async');
var stubs = require('../stubs.js');

describe('DataModel', function() {
  var testDataModel;
  var dataModelParams = stubs.dataModelStub(); // simply returns a JSON dictionary

  describe('#create()', function() {
    describe('data model import', function() {
      it('should import a new data model.', function (done) {
        var agent = request.agent(sails.hooks.http.app);

        agent
          .post('/datamodel/create')
          .send(dataModelParams)
          .expect(302)
          .end(function (err, res) {
            if (err) {
              throw new Error(err);
            }
            console.log(res.dataModel);

            DataModel.find().exec(function (err, dataModels) {
              console.log(dataModels); // should return an array of 1 model but returns empty array instead
              done();
            });
          });
      });
  });
});
我的控制器代码片段:

  create: function(req, res) {
    DataModel.create(req.params.all(), function dataModelCreated(err, dataModel) {
      if (err) {
        sails.log.debug(err);
      }

      FlashService.success(req, 'Successfully imported a new data model.');
      fs.ensureDirSync(path.join(sails.config.paths.DATASET_EXTRACT_PATH, dataModel.fileSafeName));
      fs.ensureDirSync(path.join(sails.config.paths.DATASET_DOWNLOAD_ROOT, 'non_pii', dataModel.fileSafeName));
      fs.ensureDirSync(path.join(sails.config.paths.DATASET_DOWNLOAD_ROOT, 'pii', dataModel.fileSafeName));
      fs.ensureDirSync(path.join(sails.config.paths.DATASET_ENCRYPT_PATH, dataModel.fileSafeName));
      return res.redirect('/admin/manage_data_models');
    });
  }

请注意,当我的应用程序启动时,
create
功能实际上运行正常。关于为什么我的测试不能正常工作,有什么建议吗?如果有帮助的话,我正在使用
sails内存进行测试。

嗯,你不需要通过类似sails应用程序的测试吗?这里有一个例子说明了您需要做什么。查看第二个答案中的before函数:


我想出来了。我需要先对我的代理进行身份验证(通过调用登录路径),然后才能通过这些调用

基本上:

var agent = request.agent(sails.hooks.http.app);
agent.post('YOUR_LOGIN_ROUTE').end(done);

// do your tests

是的,我试过
http://localhost:1337
以及
sails.hooks.http.app
,但两者都导致了相同的问题。它在测试片段的第13行。