【问题标题】:Sails JS: unit testing common server bootstrap fileSails JS:单元测试通用服务器引导文件
【发布时间】:2014-05-02 17:13:18
【问题描述】:

我正在使用 Mocha(以及 supertest、should 等...)

我正在测试以下控制器和模型(示例): 控制器1,控制器2,模型1,模型2。

我将测试保存在

  • ./tests/controller/controller1.js
  • ./tests/controller/controller2.js
  • ./tests/model/model1.js
  • ./tests/model/model2.js

**问题:**

在每个测试文件中,我使用 before() 来引导sails 服务器以及其他配置。

但是我觉得这不是一个好习惯,因为我不想在每个测试文件中引导服务器,必须有一个 ./test/bootstrap.js 文件在其他测试之间共享服务器.

怎么做?

这是一种好的做法还是我应该继续使用当前的实施方式?

【问题讨论】:

    标签: express mocha.js sails.js


    【解决方案1】:

    这种做法很好。这就是我们做很多core Sails integration tests 的方式!只需确保在测试运行后降低 Sails 实例,在 after() 方法中。如果您发现自己使用lift 函数的一组通用配置选项,您可能还希望将服务器提升代码抽象到一个帮助文件中。

    【讨论】:

    • “这个做法很好”,“这个”指的是什么?在每个测试文件之前起航?如果您的意思是在所有测试中抬起一次,我该怎么做?我没有看到代码有一个常见的帆升降机。我如何告诉 Mocha 使用 ./tests/bootstrap.js 在所有测试运行之前升起风帆,并在完成后降下风帆?
    • 您目前在每个测试套件之前提升 Sails 的做法都很好。尝试实现一个可以跨多个测试文件工作的解决方案问题多于其价值;您最好从每个套件的干净服务器状态开始,或者在某些情况下,从每个单独的测试开始。核心集成测试使用 appHelper.js 库主要用于构建测试应用程序(仅与核心测试相关),但也用于使用一些默认配置来提升 Sails。
    【解决方案2】:

    我知道这来晚了,但我也为此苦苦挣扎,因为我的应用程序中有大量测试套件,这意味着每个套件都增加了提升降低应用程序所花费的时间,并增加了测试的总时间花费。

    但是我发现如果我以这种方式在第一个套件中提升应用程序:

    before(function(done) {
        Sails.lift({}, function (err, server) {
          if (err) throw err; // or handle it
          sails = server;
          dbInitStuff(function callback() {
            done(null, sails);
          });
        });
      });
    

    在我没有放下帆之后:

    after(function(done) {
        //sails.lower(done);
        done();
      });
    

    当代码到达第二个套件时,它识别出一个全局“sails”变量,该变量是对在第一个套件中初始化并保持相同状态的帆的引用。我能够运行测试并以这种方式继续,直到我放下帆的最后一个套件。

    可能不是一个好习惯,但它在我的案例中起到了作用。

    【讨论】:

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