我无法理解如何设置变量以供我的测试使用。例如,我有一个名为spark.isTriple()的函数,它接受一个数字并查看一个名为dice的数组,如果该值出现三次或更多次则返回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
问题是'dice'也在早期测试中设置,该测试实际上正在测试rollDice()函数。在那个测试中,骰子被设置为一个随机的值数组,这是它应该做的和测试。但是对于这个特定的测试,我希望能够将'dice'设置为特定的数组,以便测试我的isTriple()函数。我已尝试将“dice = [1,2,2,2,3,4]”置于before()调用和beforeEach()调用中,但它似乎没有任何区别。
如果有人能给我一些帮助或指示,我们将不胜感激。
答案 0 :(得分:2)
所以mocha + coffeescript有时需要在正确的范围内进行显式声明,如果你想要一个整套测试可以使用的变量,并且可以在before / beforeEach / after / afterEach期间进行操作。
describe 'spark.isTriple', ->
dice = null #force coffeescript var declaration
it "should blah blah", ->
dice = [1,2,2,2,4,5]
我很确定这些内容可以解决您的问题,但如果您发布一个完整的文件来证明问题,我可以肯定。
答案 1 :(得分:0)
我在这里不同意彼得。我认为根据测试中的变量是一个坏主意 - 它会让你在测试中出现间歇性和奇怪的失败。任何因测试而改变的东西都应该只包含在那个测试中。为此,我写了你的代码重写(从咖啡控制台):
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),因为_
在控制台中具有特殊含义,所以我认为避免使用它是一种好习惯。