rspec 中的这个符号是什么:它 { is_expected.to ... }

Hom*_*ith 7 ruby rspec

我正在阅读“更好的规格”页面,在其中一个示例中,它说:

context 'when logged in' do
  it { is_expected.to respond_with 200 }
end
context 'when logged out' do
  it { is_expected.to respond_with 401 }
end
Run Code Online (Sandbox Code Playgroud)

我不承认这一点。我通常会这样做:

context 'when logged out' do
  it 'responds with a 401' do
    expect(response).to eq(401)
  end
end
Run Code Online (Sandbox Code Playgroud)

那是什么语法?

Ant*_*ony 10

这是 Rspec 3.XX 中大量引入的东西。它位于此处概述的单行语法指南下

RSpec 支持单行语法来设置对主题的期望。RSpec 将为示例提供一个文档字符串,该字符串是从示例中使用的匹配器自动生成的。这是专门为帮助避免在示例中使用的文档字符串和匹配器彼此完全镜像的情况下重复的。过度使用时,它可能会产生无法很好阅读的文档输出或有助于理解您所描述的对象。

这有两种口味:

is_expected 被简单地定义为 expect(subject) 并且是为当您使用 rspec-expectations 及其更新的基于期望的语法而设计的。


Ole*_*huk 6

it { is_expected.to respond_with 200 }
Run Code Online (Sandbox Code Playgroud)

那更具可读性。如果您可以从测试中读取描述,为什么要添加描述。你的代码应该简单、智能并且可读...但如果你真的想要,你甚至可以添加新颖的...由你决定:)