2013-08-06 89 views
2

例如,这两个测试:RSpec中'expect'和'should'是否有区别?

it "fails to create given a bad player list" do 
    Team.new("Random name", bad_players).should raise_error 
end 

it "fails to create given a bad player list" do 
    expect {Team.new("Random name", bad_players)}.to raise_error 
end 

它们返回不同的输出(第一个出现故障,而第二传递一个)。根据团队模型的内容,我希望既可以通过也可以失败。

完整RSpec的代码是:

require_relative 'team' 

describe "Team" do 

    it "has a name" do 
    Team.new("Random name").should respond_to(:name) 
    end 

    it "has a list of players" do 
    Team.new("Random name").players.should be_kind_of Array 
    end 

    it "is favored if it has a celebrity on it" 
    it "complains if there is a bad word in the name" 

    context "given a bad list of players" do 
    let(:bad_players) { {} } 

    it "fails to create given a bad player list" do 
     expect { Team.new("Random name", bad_players) }.to raise_error 
    end 
    end 

end 

我想原因“应该”会工作是因为在类似的语法的“它‘有一个名为’”测试。如果事实证明'应该'是不正确的,'期望...到'是正确的,我很想知道什么时候使用一个和另一个。谢谢。

回答

4

https://github.com/rspec/rspec-expectations/blob/master/Should.md报价:

从一开始RSpec::Expectations只要shouldshould_not方法来定义expectat离子在任何物体上。在版本 2.11 expect方法被引入,现在是推荐的方法来定义对象的期望值。

该文件中的下一段描述了实施中的差异以及为什么expect现在是推荐的方法。

在这一点上,几乎所有可以用shouldshould_not做的事都可以用expect完成。详情请参阅http://rubydoc.info/gems/rspec-expectations/frames,使用expect

至于你的具体代码,第一个例子失败的原因是错误发生在RSpec有机会参与之前。您仍然可以使用should来检查是否引发错误,但是您必须给RSpec一个工作机会。语法是lambda {...}.should raise_error其中...是您正在测试的代码。

3

占多是有区别的

should将验证什么是对版权方是true。它必须用于简单比较结果。

(1+1).should eq(3-1) 

expect取块并验证块的执行是否有特定的效果。如必须使用should前后块执行

expect{ User.new.save }.to change(User, :count).by(1) 

后比较的情况时,你可以(这是比较容易写)和expect只有当should不能做这项工作必须在使用

相关问题