0

这个周末我试图从我的流星应用程序中测试一个包“A”。这个包依赖于另一个定义所有集合的包“B”。所以包“B”公开了所有需要的集合。

包“A”公开了一个主对象,该对象具有一些使用“B”中公开的集合的方法。

我想用这样的代码替换一些集合:

myCol = {
    "findOne": return {_id: 1, "name": ben}
}

但它失败了。这段代码在 tinytest.add 代码中是可以的,但是在包“A”的方法中,它仍然使用原始的 Collection 变量。我在构建文件夹中看到所有内容都是由构建系统重写的,所以我想知道在不依赖那些 Collection 变量的情况下测试我的代码的最佳方法是什么。我有一些想法,比如将这些变量存储在具有 get/set 方法的主对象中。当我进行测试时,它可能允许我改变一切。

感谢帮助

这是示例应用程序:https ://github.com/MeteorLyon/tutorial-package-dependancy-testing 按照 README.md 运行不同的测试。如果您找到解决方案,那就太好了。

4

1 回答 1

1

如果您正在寻找存根,我强烈建议您使用sinon。具体来说,请查看文档的存根沙箱部分。你可以在这里找到气氛包。这是一个简单的例子:

Tinytest.add('my test', sinon.test(function(test) {
  // this is sandboxed stub - we are writing to a global object
  // but it will be restored at the end of the test
  test.stub(Meteor, 'userId', function() {
    return USER_ID;
  });

  // let's do the same thing with a collection
  test.stub(Posts, 'findOne', function() {
    return {_id: 1, name: 'ben'};
  });

  var post = Posts.findOne();
  test.equal(post.name, 'ben');
}));

请记住,tinytest 是一个集成测试框架,因此您可以通过充分利用这两个包的 API 来获得更好的测试。关于测试集合交互,我们发现最好不要进行太多存根,只需根据需要插入和清理。但这是非常笼统的建议 - 可能有一些特定的原因导致这在您的特定用例中不起作用。

于 2015-07-27T18:15:29.617 回答