如何格式化多行RSpec期望{}.更改

B S*_*ven 6 ruby rspec ruby-on-rails

是否有更好的方法来格式化此测试以使其更具可读性?

expect { 
  within '.foo' do
    click_link 'Delete'
  end
}.to change {Foo.count}.by 1
Run Code Online (Sandbox Code Playgroud)

期待do...end工作,但更加丑陋......

Gre*_*own 10

也许是这样的?

expected = expect do
  within '.foo' do
    click_link 'Delete'
  end
end

expected.to change { Foo.count }.by 1
Run Code Online (Sandbox Code Playgroud)

不完全漂亮,但减少了一些线路噪音.


doe*_*err 5

由于将所有内容放在大括号中并放在一行上会太长,因此我将其编写为:

expect do
  within(".foo") { click_link "Delete" }
end.to change { Foo.count }.by 1
Run Code Online (Sandbox Code Playgroud)

更新:未测试,但这也应该起作用:

click_delete_link = lambda { within(".foo") { click_link "Delete" } } 
expect { click_delete_link }.to change { Foo.count }.by 1
Run Code Online (Sandbox Code Playgroud)

但是我仍然更喜欢第一个版本:)