例如,这两个测试:
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
我认为'应该'会起作用的原因是因为'it'中的类似语法有一个名称''test。如果事实证明'应该'是不正确的并且'期望......'是正确的,我很想知道何时使用一个与另一个。感谢。
答案 0 :(得分:5)
引自https://github.com/rspec/rspec-expectations/blob/master/Should.md:
从开头
RSpec::Expectations
提供should
和should_not
方法来定义对任何对象的期望。在版本中 引入了2.11expect
方法,这种方法现在是定义对象期望的推荐方法。
该文件的下一段描述了实施方面的差异以及为什么expect
现在是推荐的方法。
此时,should
和should_not
几乎可以使用expect
完成任何操作。有关详细信息和expect
用法,请参阅http://rubydoc.info/gems/rspec-expectations/frames。
至于您的特定代码,第一个示例失败的原因是错误发生在RSpec有机会参与之前。您仍然可以使用should
来检查是否出现错误,但您必须为RSpec提供工作机会。语法为lambda {...}.should raise_error
,其中...
是您正在测试的代码。
答案 1 :(得分:3)
是的,存在差异
should
将验证权限方面的内容是true
。它必须用于简单的结果比较。
(1+1).should eq(3-1)
expect
接受一个块并验证块的执行是否具有特定效果。在比较执行块之前和之后的情况时必须使用它
expect{ User.new.save }.to change(User, :count).by(1)
尽可能使用should
(写起来更容易),expect
仅在should
无法完成工作时使用{/ 1}}