首页 > 解决方案 > 可以在 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?

标签: rubyrspec

解决方案


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

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

用这个...

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

而不是这个。

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

推荐阅读