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



我的代码使用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)

我该如何解决这个问题?

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

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

一个答案是使用 before 而不是before :each

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

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

before :each do puts "something here" end

我相信before的默认参数是:each,所以你可以省略它。

do..end块相比,{}块的优先级更强,这将要求我们使用括号,以便块不与参数而不是方法相关联。 如果参数是一个用块做某事的方法,那么它将被允许,并且可能会令人困惑。

当然,您的错误主要是由于解析器看到您正在尝试将块(意外{)应用于符号。

最新更新