【问题标题】:Sails.js and Mocha: Using supertest to create a new modelSails.js 和 Mocha:使用 supertest 创建新模型
【发布时间】:2014-12-27 15:31:05
【问题描述】:

我目前正在为我的 Sails 应用程序设置测试基础架构,并且在我尝试使用 supertest 测试 API 请求之前一切顺利。

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

这是我的代码的样子:

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-memory 进行测试。

【问题讨论】:

    标签: node.js unit-testing express sails.js supertest


    【解决方案1】:

    我想通了。我需要先验证我的代理(通过调用登录路由),然后才能通过任何这些调用。

    基本上:

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

    【讨论】:

      【解决方案2】:

      嗯,你不需要通过看起来像风帆应用的东西来进行超测吗?这里有一个例子说明了你需要做什么。查看第二个答案中的 before 函数:

      How to test controller using mocha in Sails?

      【讨论】:

      • 是的,我试过http://localhost:1337sails.hooks.http.app,但都导致了同样的问题。在测试sn-p的第13行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多