首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shoulda-matchers expect语法

shoulda-matchers expect语法
EN

Stack Overflow用户
提问于 2013-09-08 11:35:15
回答 2查看 9.9K关注 0票数 27

使用shoulda-matchers和RSpec的新expect syntax的正确格式是什么

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-08 21:48:14

当然,我们可以将shoulda匹配器与新的expect语法一起使用,如下所示:

代码语言:javascript
复制
it 'should validate presence of :email' do
  expect(subject).to validate_presence_of :email
end

或者更简洁但可读性较差的:

代码语言:javascript
复制
it { expect(subject).to validate_presence_of :email }

即使在config.syntax == :expect时,2.14中也明确支持这些匹配器通常使用的单行should格式。 should 与隐式主语一起使用时,如:

代码语言:javascript
复制
describe User
  it { should validate_presence_of :email }
end

它不依赖于 should 在其他方面所依赖的的猴子修补。

这在https://github.com/rspec/rspec-expectations/blob/master/Should.md中有介绍。实际上,该文档甚至使用上面shoulda匹配器示例来说明此异常。

另请参阅Using implicit subject with expect in RSpec-2.11,其中讨论了一个配置选项,该选项允许您使用作为it的替代方案。

代码语言:javascript
复制
expect_it { to validate_presence_of :email }

更新:从RSpec 3.0 (beta2)开始,您还可以使用:

代码语言:javascript
复制
it { is_expected.to validate_presence_of :email }
票数 59
EN

Stack Overflow用户

发布于 2015-10-06 01:47:22

我将补充@peter-alfvin的答案。如果你用shoulda-matchers测试模型及其迁移本身,你不能在it块之外使用:expect,所以不能写:

代码语言:javascript
复制
RSpec.describe ModelName, type: :model do
   expect(subject).to belong_to(:user)
end

你会得到这样的期望:

代码语言:javascript
复制
`expect` is not available on an example group (e.g. a `describe` or `context` block).

但正确的版本是:

代码语言:javascript
复制
RSpec.describe ModelName, type: :model do
   it { expect(subject).to belong_to(:user) }
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18680131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档