使用shoulda-matchers和 RSpec 的新期望语法的正确格式是什么?
问问题
9905 次
2 回答
59
当然可以使用带有新的 expect 语法的 shoulda-matchers,如下所示:
it 'should validate presence of :email' do
expect(subject).to validate_presence_of :email
end
或更简洁但可读性较差:
it { expect(subject).to validate_presence_of :email }
2.14 明确支持这些匹配器通常使用的单行should
格式,即使config.syntax == :expect
. 何时should
与隐式主题一起使用,如:
describe User
it { should validate_presence_of :email }
end
它不依赖于其他依赖的猴子Kernel
补丁should
。
这在https://github.com/rspec/rspec-expectations/blob/master/Should.md中有介绍。事实上,该文档甚至使用上述shoulda
匹配器示例来说明此异常。
另请参阅在 RSpec-2.11 中将隐式 `subject` 与 `expect` 结合使用,其中讨论了一个配置选项,可让您用作it
.
expect_it { to validate_presence_of :email }
更新:从 RSpec 3.0(beta2)开始,您还可以使用:
it { is_expected.to validate_presence_of :email }
于 2013-09-08T13:48:14.247 回答
0
我将补充@peter-alfvin 的答案。如果您自己测试模型及其迁移,shoulda-matchers
您不能在块:expect
外使用it
,所以不能写:
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
于 2015-10-05T17:47:22.473 回答