Meteor - 运行 使用测试数据库进行包测试
Meteor - Run package tests with test database
(这类似于这个问题:How to set up separate test and development database in meteor,但是它已经 2 岁了,从那时起 meteor 已经发生了很大的变化。)
我正在尝试创建自己的程序包,我想 运行 进行单元测试。我想确保我的查询是正确的,所以我想实际 运行 查询测试数据库而不是仅仅存根函数。
我有两个问题:
- 如何告诉 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 了解更多详情。
(这类似于这个问题:How to set up separate test and development database in meteor,但是它已经 2 岁了,从那时起 meteor 已经发生了很大的变化。)
我正在尝试创建自己的程序包,我想 运行 进行单元测试。我想确保我的查询是正确的,所以我想实际 运行 查询测试数据库而不是仅仅存根函数。
我有两个问题:
- 如何告诉 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 了解更多详情。