rspec 中的 it 块可以使用大括号吗?

Can's use curly braces for it blocks in rspec?

it 'returns true for correct password' do
   expect(user.is_password?('password')).to eq(true)
end

我的 rspec 有这个代码,但是当我用

替换它时

it 'returns true for correct password' { expect ...}

它抱怨

syntax error, unexpected '{', expecting `end'
  ...ns true for correct password' {expect(user.is_password?('pas..

大括号不应该等同于do...end吗?

由于 doend 是除了块之外不在任何其他上下文中使用的关键字,因此 Ruby 解释器在理解它时没有问题。但是花括号至少在两种不同的上下文中使用,首先充当块分隔符,其次充当 Hash 的分隔符,这意味着您必须在此处帮助 Ruby 解释器使用花括号让它知道你想在什么上下文中使用花括号。

在你的例子中,如果你使用带括号的方法语法,即 it() 而不是 it,这应该告诉解释器括号后的花括号应该被解释为块的分隔符。

使用这个...

it('returns true for correct password') { expect ... }

而不是这个。

it 'returns true for correct password' { expect ... }