rspec之前:每个 - 如何在一行而不是do..end块上做?

时间:2013-10-20 14:00:36

标签: ruby rspec

我的代码使用before :each块:

before :each do
  @unsorted=[1,5,6,7,4,5,8,4,2,5,2]
end 
it "contains an unsorted an array" do
  test_array = BubbleSort.new(@unsorted)
  expect(test_array.contents).to eq [1,5,6,7,4,5,8,4,2,5,2]
end 

我希望before :each代码内联但使用

before :each {@unsorted=[1,5,6,7,4,5,8,4,2,5,2]}

给出:

syntax error, unexpected '{', expecting keyword_
end (SyntaxError)

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

当有一个块写为{}时,Ruby的语法不允许省略参数周围的括号。你需要这样做:

before(:each){@unsorted=[1,5,6,7,4,5,8,4,2,5,2]}

答案 1 :(得分:2)

一个答案是使用before代替before :each,即

before {@unsorted=[1,5,6,7,4,5,8,4,2,5,2]}

答案 2 :(得分:2)

这不是Ruby的惯用语,但它是允许的。

before :each do puts "something here" end

我认为before的默认参数是:each,所以您可以将其删除。

{}块相比,do..end块的强度优先级要求我们使用括号,以便块不与参数而不是方法相关联。如果参数是一个用块做某事的方法,那么它就会被允许,也许会让人感到困惑。

当然,您的错误特别来自解析器,因为您正在尝试将块(意外的{)应用于符号。