unit-testing - Meteor - 使用测试数据库运行包测试

标签 unit-testing meteor tinytest

(这与这个问题类似: How to set up separate test and development database in meteor ,但是它已经有 2 岁了,从那时起,meteor 已经发生了很大的变化。)

我正在尝试创建自己的包,并且想要运行单元测试。我想确保我的查询是正确的,因此我想实际针对测试数据库运行查询,而不是仅仅 stub 函数。

我有两个问题:

  • 如何告诉 Meteor 针对测试数据库而不是真实数据库运行?
  • 轻松向测试数据库填充数据的最佳方式是什么?

理想情况下,我需要一个设置步骤来清除而不是填充测试数据库,这样我总是确切地知道每个数据库中的数据。

我是一个 Tinytest 新手(尽管我使用过其他单元测试框架),因此非常感谢代码示例。

最佳答案

这是一个与我们使用的示例类似的示例:

var resetCollection = function(name) {
  var Collection = this[name];
  if (Collection)
    // if the collection is already defined, remove its documents
    Collection.remove({});
  else
    // define a new unmanaged collection
    this[name] = new Mongo.Collection(null);
};

reset = function() {
  var collections = ['Comments', 'Posts'];

  // reset all of the collections
  _.each(collections(function(name) {resetCollection(name);}));

  // insert some documents
  var postId = Posts.insert({title: 'example post'});
  Comments.insert({postId: postId, message: 'example comment'});
};

Tinytest.add('something', function(test) {
  reset();

  var post = Posts.findOne();
  var comment = Comments.findOne();
  return test.equal(comment.postId, post._id);
});

在每次测试开始时,我们调用reset来清理数据库并创建必要的集合。

如何告诉 Meteor 针对测试数据库而不是真实数据库运行?

当您测试包时,将为您创建一个单独的数据库。无需手动指定数据库路径。

用数据轻松填充测试数据库的最佳方法是什么?

上面的例子应该可以给你一些提示。我发现避免包之间冲突的最佳方法是在测试中使用非托管集合 (name = null)。 resetCollection 函数应正确避免重新定义由其他包导出的任何托管集合。另请参阅this question了解更多详情。

关于unit-testing - Meteor - 使用测试数据库运行包测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763503/

相关文章:

c# - 使用 Moq.It.IsAny 测试以某物开头的字符串

javascript - 如何在 Meteor-Angular 应用程序中安装 Bower 组件

javascript - 将 HTML 文件拉入 TinyTest

testing - 如何测试服务器端 debugOnly 包

unit-testing - 从 Meteor 1.0 开始如何测试 Meteor 包?

unit-testing - 使用类的主要方法进行调试?

c# - 在 .NET 中以编程方式将系统时间设置为正确的服务器时间?

unit-testing - 使用Grails时,使非写服务方法静态化有什么好处

mongodb - "group by"对 meteor 收集的查询

mongodb - MongoDB 上的 Meteor react 性有多深或多少级别