鉴于此课程:
class First
def to_s ; "Hello World" ; end
end
和这个规范:
require 'first'
describe First do
describe "#to_s" do
it { should == "Hello World" }
end
end
我明白了:
Failures:
1) First#to_s
Failure/Error: it { should == "Hello World" }
expected: "Hello World"
got: Hello World (using ==)
Diff:
@@ -1,2 +1,2 @@
-"Hello World"
+Hello World
# ./spec/first_spec.rb:5:in `block (3 levels) in <top (required)>'
但我希望这会过去。我的问题是:
答案 0 :(得分:4)
您的外describe
区块:
describe First do
设置内部示例to be an instance of First
的主题。也就是说,您描述的所有it
都是First
个对象。文本#to_s
示例并未指示rspec在对象上调用to_s
。
由于First.new
不等于"Hello World"
,因此规范失败。
但是,由于rspec确实在对象上调用to_s
以在失败描述中输出它,因此“Hello World”会出现在那里。您可以尝试以下操作以确保正在测试字符串转换:
its(:to_s) { should == "Hello World" }
答案 1 :(得分:2)
我从未使用#method_name
来自动评估结果。我更喜欢冗长以确定我在做什么。
一般来说,我从中选择一个:
describe First do
specify { First.new.to_s.should == "Hello World" }
end
或者:
describe First do
describe "#to_s" do
subject { First.new.to_s }
it { should == "Hello World" }
end
end
或者:
describe First do
describe "#to_s" do
let(:result) { First.new.to_s }
specify { result.should == "Hello World" }
end
end