【问题标题】:How to set variables inside a mocha test如何在摩卡测试中设置变量
【发布时间】:2013-08-07 02:58:26
【问题描述】:

我无法理解如何设置用于我的测试的变量。例如,我有一个名为 spark.isTriple() 的函数,它接受一个数字并查看一个名为 dice 的数组,如果该值出现 3 次或更多次,则返回 true,否则返回 false。

#In game.coffee

window.spark =  
  isTriple: (n)->        
    triples = _.filter dice, (i)->
      n is i
    if triples.length >= 3
      true
    else
      false

我有一个看起来像这样的测试。

# In game_spec.coffee

describe 'spark.isTriple', ->
  it "Should return true if the given value is found 3 or more times in the dice roll", ->
    dice = [1,2,2,2,4,5]
    spark.isTriple(2).should.be.true

问题是“骰子”也在早期测试中设置,该测试实际上是在测试 rollDice() 函数。在那个测试骰子中,它被设置为一个随机的值数组,这是它应该做的和测试的。但是对于这个特定的测试,我希望能够将“骰子”设置为特定的数组,以测试我的 isTriple() 函数。我尝试将“dice = [1,2,2,2,3,4]”放在 before() 调用和 beforeEach() 调用中,但似乎没有任何区别。

如果有人能在这方面给我一些帮助或指点,我将不胜感激。

【问题讨论】:

    标签: javascript coffeescript mocha.js


    【解决方案1】:

    因此,如果您想要一个整套测试都可以使用并且可以在 before/beforeEach/after/afterEach 期间操作的变量,那么 mocha + coffeescript 有时需要在正确的范围内进行显式声明。

    describe 'spark.isTriple', ->
      dice = null #force coffeescript var declaration
      it "should blah blah", ->
        dice = [1,2,2,2,4,5]
    

    我很确定这些方面的内容会解决您的问题,但如果您发布一个完整的文件来证明该问题,我可以肯定。

    【讨论】:

    • 感谢彼得的回答。无论如何,我最终还是按原样重构了该函数,但如果再次遇到类似情况,我会牢记您的建议。
    【解决方案2】:

    我在这里不同意彼得的观点。我认为在测试中依赖一个变量是一个坏主意——它会让你在测试中出现间歇性和奇怪的失败。任何因测试而发生变化的东西都应该只包含在该测试中。为此,我会像这样(从咖啡控制台)编写您的重写代码:

    window.spark = hasTriple: (dice, n) ->
      ld.filter(dice, ((i) -> n is i)).length >= 3 
    { hasTriple: [Function] }
    coffee> window.spark.hasTriple([1,2,1,2,5,6], 2) 
    false
    coffee> window.spark.hasTriple([1,2,2,2,5,6], 2) 
    true
    

    我将 _ 重命名为 ld(又名 Lodash),因为 _ 在控制台中具有特殊含义,所以我认为避免使用它是一个好习惯。

    【讨论】:

    • 谢谢@jcollum。我最终继续前进,发现自己无论如何都需要将骰子数组直接传递给 isTriple ,这样就解决了。我不确定彼得斯的回答是否有效,但我想我同意你在这里所说的。这感觉更干净,也更安全。非常感谢。
    • @jcollum 普遍同意,但由 beforeEach 配置共享变量然后对该共享变量的每个方面进行单独测试是常见且干净的(恕我直言)。这几乎是我唯一一次在 describe 块中使用非常量变量。
    • @PeterLyons 是的,你是对的,但我通常将这些东西保留用于测试设置/拆卸变量(存根等)。他的 isTriple 代码看起来像是在解决得墨忒耳法则的麻烦,所以我把对外部变量的引用拉了出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    相关资源
    最近更新 更多