Sails JS单元测试

3
我创建了一个Sails JS应用程序。我想为我的应用程序添加单元测试。我使用以下方法进行单元测试。 http://sailsjs-documentation.readthedocs.org/en/latest/concepts/Testing/ 我使用grunt和mocha来测试我的应用程序。现在,我需要一种方法来覆盖一些sails方法(如find、update等)以用于我的测试,因为我不希望在测试代码时与数据库交互。是否有一种方法可以覆盖sails js的方法?例如,当我在测试中使用User.find方法时,我希望有一个特定的结果来测试我的其他方法是否完美工作。任何形式的帮助都将不胜感激。
1个回答

3
如果你想进行测试而不触碰生产数据库,你可以使用不同的表格/集合来测试你的数据库。这是在集成测试中常用的方法(不使用模拟数据)。在文件bootstrap.test.js中有一个例子。
var Sails = require('sails'),
    sails;

before(function (done) {
  Sails.lift({
    connections: {
      mongodbServer: {
        database: 'database_test'
      }
    },
    models     : {
      migrate: 'drop'
    }
  }, function (err, server) {
    sails = server;
    if (err) return done(err);

    done();
  });
});

after(function (done) {
  // here you can clear fixtures, etc.
  sails.lower(done);
});

假设您的连接使用mongodbServer和数据库database_test。请配置它以满足您的需求。


1
谢谢您的回答andi,我已经阅读了一些关于测试的文章,大多数都说单元测试应该在执行后尽快完成。所以您认为使用模拟是一个好主意,但我找不到任何特定的方法来在Sails中使用模拟来覆盖Sails内置函数或其他方法。 - Gayan Charith
2
“单元测试”和“集成测试”确实是不同的。我的解决方案实际上是针对集成测试的。因为(仅代表个人观点)在Sails的模型中进行纯粹的单元测试很难实现,而且它带来的优势较少。但如果您仍然想要尝试,请使用“sinon”。这里是参考资料@Github - Andi N. Dirgantara
我正在编写测试用例,位于我的test/unit/controllers和test/unit/models文件夹中。在我的grunt文件中,我该如何使用bootstrap.test.js文件来运行unit文件夹中的所有测试。现在,我正在使用grunt逐个运行测试文件。 - Gayan Charith
我只使用 npm test 而没有 Grunt。只需编辑 package.json,在 scripts 字段下添加 test 字段,并设置类似于这个值的值 "test": "_mocha test/bootstrap.test.js test/unit/**/*.js --no-timeouts" ,它会读取 test/unit 目录下的所有 js 文件。 - Andi N. Dirgantara
谢谢你的回答,Andi。我尝试使用测试数据库并使用npm test运行测试。但是它会出现错误,显示“一个钩子(orm)无法加载!”,你对这个问题有什么想法吗?提前致谢。 - Gayan Charith
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接