expect()在rspec / cucumber中做了什么?

时间:2013-11-18 00:55:02

标签: ruby-on-rails ruby testing rspec cucumber

在Michael Hartl的Rails Tutorial中,许多示例使用expect()方法。以下是黄瓜步骤定义中的一个这样的例子:

Then /^she should see her profile page$/ do
  expect(page).to have_title(@user.name)
end

同样的例子可以写成同样的效果:

Then /^she should see her profile page$/ do
  page.should have_title(@user.name)
end

为什么要使用expect()?它增加了什么价值?

2 个答案:

答案 0 :(得分:8)

这里有关于rspec-expectations gem的文档。 Why switch over from should to expect基本上:

  

应该和不应该通过添加到每个对象来工作。但是,RSpec并不拥有每个对象,也无法确保它们在每个对象上都能保持一致。特别是,与BasicObject-subclassed代理对象一起使用时,它们可能会导致意外失败。   期望通过不需要在所有对象上可用来完全避免这些问题。

更详细的原因放在:RSpec's New Expectation Syntax

答案 1 :(得分:3)

expect更具普遍性。您正在将对象或块传递给rspec的expect方法,而不是尝试在对象之外的对象上调用should方法。因此,expect越来越受到开发人员的青睐。