是否应该使用RSpec预期语法

是否应该使用RSpec预期语法,rspec,shoulda,Rspec,Shoulda,使用和RSpec的新语法的正确格式是什么?当然可以使用shoulda matchers和新的expect语法,如下所示: it 'should validate presence of :email' do expect(subject).to validate_presence_of :email end 或者更简洁但可读性较差: it { expect(subject).to validate_presence_of :email } 即使在config.syntax==:expec

使用和RSpec的新语法的正确格式是什么?

当然可以使用shoulda matchers和新的expect语法,如下所示:

it 'should validate presence of :email' do
  expect(subject).to validate_presence_of :email
end
或者更简洁但可读性较差:

it { expect(subject).to validate_presence_of :email }
即使在
config.syntax==:expect
的情况下,2.14也明确支持这些匹配器通常使用的单行
格式
should
与隐式主题一起使用时,如:

describe User
  it { should validate_presence_of :email }
end
它不依赖于
内核
的猴子补丁,而
应该依赖于此。

这是一本书。事实上,该文档甚至使用上述
shoulda
matcher示例来说明此异常

另请参见,其中讨论了一个配置选项,该选项允许您将其用作
it
的替代选项

expect_it { to validate_presence_of :email }
更新:自RSpec 3.0(beta2)起,您还可以使用:

it { is_expected.to validate_presence_of :email }

我将回答@peter alfvin。如果您使用
shoulda matchers
测试模型及其迁移本身,则不能使用
:expect
块之外,因此不能写入:

RSpec.describe ModelName, type: :model do
   expect(subject).to belong_to(:user)
end
你会得到期望:

`expect` is not available on an example group (e.g. a `describe` or `context` block).
但正确的版本是:

RSpec.describe ModelName, type: :model do
   it { expect(subject).to belong_to(:user) }
end

对不起,我的意思是应该放弃投票结束,因为这主要是基于意见,我会说,这是一个特别的例子,询问某事是否是一个“好主意”是一个例外,因为有一个基于事实的解释认为该问题不是问题。编辑了问题详细信息,使其适合于此。第一个块也将被
desribe用户
包围,对吗?因为它看起来像是3行到3行的比较,但不是这样。如果是的话,为了清晰起见,您可能想在第一个代码块中添加它。@MichaelCurrent是的,它会。同意。谢谢你指出这一点。答案更新。有人知道否决票是为了什么吗?这是否与“主要基于意见”的投票密切相关?很遗憾,你需要it块。我一直喜欢shoulda匹配,因为它们的语法简洁。实际上,你不需要块。这正是我想要回答的要点。一行式
should
格式完全可以接受,并且完全可以接受/得到最新约定的支持。但你确实给了我一个主意。如果RSpec引入了
expect\u it
作为
expect(subject)
的别名,该怎么办?