【问题标题】:Sails.js: calling controller method from unit testSails.js:从单元测试调用控制器方法
【发布时间】:2016-01-23 11:28:31
【问题描述】:

我会寻求一些帮助。我正在尝试制作一种可以在单元测试中调用并在触发特定路由时调用的方法。 createFromRoute() 工作得很好。如果我直接调用 create(),就会出错。

用户控制器

module.exports = {

  /**
   * UserController.createFromRoute()
   */
  createFromRoute: function(req, res, next) {
    console.log('>>>', 'Routing to UserController.createFromRoute()');

    // Calling create method
    this.create(req.params.all())
      .then(function(user) {
        res.json(user);
      })
      .fail(res.badRequest);
  },

  create: function(data) {
    console.log('>>>', 'Entering create() function.');
    return User.create(data);
  },

};

样本测试

var UserController = require('../../api/controllers/UserController.js');

describe('testing', function() {
  data = {};
  UserController.create(data);
});

错误

>>> Entering create() function.
path/api/controllers/UserController.js:28
  return User.create(data);
           ^
ReferenceError: User is not defined

【问题讨论】:

    标签: javascript node.js unit-testing sails.js


    【解决方案1】:

    全局变量User 仅在您解除应用程序后可用。你launched sails in a bootstrap file了吗?

    // /test/bootstrap.test.js
    var Sails = require('sails'),
      sails;
    
    before(function(done) {
    
      // Increase the Mocha timeout so that Sails has enough time to lift.
      this.timeout(5000);
    
      Sails.lift({
        // configuration for testing purposes
      }, function(err, server) {
        sails = server;
        if (err) return done(err);
        // here you can load fixtures, etc.
        done(err, sails);
      });
    });
    
    after(function(done) {
      // here you can clear fixtures, etc.
      Sails.lower(done);
    });
    

    由于您的模型在提升时转换为水线集合,因此 有必要在尝试测试之前提升您的sailsApp(这 类似地适用于控制器和应用程序的其他部分,所以要 一定要先调用这个文件)。

    【讨论】:

    • 感谢您的帮助。我做到了,但这并没有解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多