【问题标题】:How to get the runtime url of sails app within mocha tests如何在 mocha 测试中获取 Sails 应用程序的运行时 url
【发布时间】:2017-08-29 18:29:54
【问题描述】:

我知道sails.getBaseUrl 以及它是deprecated 的事实。在bootstrap.test.js 中,在执行sails lift 时,我指定了port: 1337sails.getBaseUrl() 返回http://localhost:1337。然后我使用 mocha 运行测试(如果重要的话,从 WebStorm 中)。同时,我可以在终端执行sails lift 并在http://localhost:1337 上运行相同的sails 应用程序。两者似乎都运行良好,没有端口冲突。

那么在运行测试时,mocha 在什么位置运行sails 应用程序?

【问题讨论】:

    标签: javascript node.js socket.io sails.js mocha.js


    【解决方案1】:

    问题在于我们的测试执行的是sails load,而不是sails lift。根据sails liftload 文档和source code,我发现sails load 中没有完成端口绑定。所以我只是添加了额外的代码来绑定/取消绑定端口作为测试生命周期的一部分。

    before(function (done) {
        server = sails.hooks.http.server.listen(sails.config.port, function (err) {
          if (err) {
            return done(err);
          }
          return done();
        });
      });
    
    after(function (done) {
        server.close();
        done();
      });
    

    【讨论】:

    • 你为什么要这样做而不是在你的测试中只做.lift()
    【解决方案2】:

    如果您没有将其设置为其他值,那么您的 Sails 应用程序将从端口 1337 开始。我会检查您是否没有在某个地方设置一个或另一个应用程序正在使用的 PORT 环境变量覆盖默认值。除非其中一个应用程序在像 Docker 这样的虚拟机中运行,否则它们不可能同时在端口 1337 上运行而不会发生冲突,因此您的测试要么静默失败,要么它们正在运行不同的端口。

    在 Sails v0.12.x 和 Sails v1.0 中,HTTP 服务器以 sails.hooks.http.server 的形式提供,因此您应该能够使用 sails.hooks.http.server.address().port 检查应用正在侦听的端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多