Testing 流星试验规程

Testing 流星试验规程,testing,mocking,meteor,mocha.js,Testing,Mocking,Meteor,Mocha.js,这与其说是一个技术问题;我看到很多人都在使用它,它看起来很整洁,所以我会试试 我想知道的是,人们是如何处理诸如与流星收藏相关的模型之类的测试工作的。你会用它来模拟数据库记录吗?是否有使用require加载的框架文件,以便使用Meteor.Collection 编辑 更具体地说,我正在编写一个使用多种模型的应用程序。如果您看过其中一个,您就知道每个模型的@\u集合属性都是新的Meteor.collection(…) 使用模型而不是数据库记录的一个主要优点是,您可以将行为附加到它,而我正试图测试这种

这与其说是一个技术问题;我看到很多人都在使用它,它看起来很整洁,所以我会试试

我想知道的是,人们是如何处理诸如与流星收藏相关的模型之类的测试工作的。你会用它来模拟数据库记录吗?是否有使用
require
加载的框架文件,以便使用
Meteor.Collection

编辑

更具体地说,我正在编写一个使用多种模型的应用程序。如果您看过其中一个,您就知道每个模型的
@\u集合
属性都是
新的Meteor.collection(…)

使用模型而不是数据库记录的一个主要优点是,您可以将行为附加到它,而我正试图测试这种行为

假设你有一个棋盘上有两块棋子的游戏。当玩家点击一个棋子时,我们希望通过突出显示方块来显示棋盘上的所有合法移动。该工件有一种方法,根据该工件的移动方式以及是否有其他工件挡在其路径上,确定给定位置是否构成合法移动;确定途中是否有碎片可能需要数据库查询:

class Piece extends Minimongoid
  @_collection: new Meteor.Collection('pieces')

  @find: (selector = {}, options = {}) ->
    document = @_collection.findOne(selector, options)
    if document
      model = new @(document)
      _.extend(model, model.attributes)

  @where: (selector = {}, options = {}) ->
    @_collection.find(selector, options).map (record) =>
      model = new @(record)
      _.extend(model, model.attributes)

class Bishop extends Piece
  @code: "bishop"

  isLegalMove: (location) ->
    @isOnMyPath(location) && @noPiecesInMyWay(location)

  noPiecesInMyWay: (location) ->
    _.all Piece.where({ color: @otherColor() }), (piece) -> 
      !piece.isOnMyPath(location) || (piece.location == location && piece.color == @otherColor())
因此,如果我用测试框架加载这个类,我实际上只看到两个测试代码的选项:

  • 用类似的东西模拟@_集合对象
  • 让测试框架加载Meteor(或其部分),以便我的模型可以访问Meteor.Collection
  • 更新

    大约一年后,我回到这里,尝试了一些建议的测试方法

    我看了一下,这似乎是所有可用解决方案中最完整的,但我无法让它运行

    我也看了一下,但真的不在乎语法。我想要一个BDD风格的语法,相比之下,Laika提供的语法看起来相当神秘


    然而,经过一点尝试和错误之后,我能够开始工作了,到目前为止,我对此非常满意。它运行你的应用程序并拉入你的测试文件,因此不需要模拟框架的任何部分。当然,这还远远不够完美,但这是我能够运行的第一件事,它有我喜欢的语法,所以它赢了。感谢贾吉尔的回答

    在测试我们的应用程序时,我们遇到了类似的问题。有很多活动部件和边缘情况,所以自动化套件是必不可少的。我们已经构建了一个包来支持Meteor上下文中的测试,包括会话、Meteor.Collections、Deps等。我们还在Meteor的Devshop 0上简要介绍了它


    这只是早期阶段,但对我们来说是非常宝贵的,并且随着人们的需要,它涵盖了更多的用例。

    虽然我同意大型代码库的测试是优先考虑的,但我对Meteor上的测试有点困惑,因为我相信它包含了MVP的理念。你认为基于流星的测试是非常必要的吗?你打算用Meteor来构建一个大规模的应用程序并投入生产吗?虽然感觉你在引诱我加入一场关于测试优点的火焰之战,但我会看看我是否可以不按按钮就上钩。应用程序是否大规模并投入生产并不重要;重要的是,我希望在创建bug时尽快发现它们,因为这样更容易修复它们。在我的例子中,我使用了几个极小类模型,它们有复杂的逻辑来指示它们的行为;出错的机会很多,使用测试来驱动代码比点击应用程序更容易。不仅更容易,而且更快、更有效。如果你感觉到“诱饵”,请道歉。无意冒犯。既然你已经提出了你的问题,事情就清楚了。谢谢。你可能想看看。谢谢,我一定会看一看的!是否有一个meteor框架可以模拟es6导入或完全模拟?