Ruby on rails Ruby lambda的执行应该在规范中
对不起,我是Ruby的新手 我在RSpec测试中有这样的代码:Ruby on rails Ruby lambda的执行应该在规范中,ruby-on-rails,ruby,rspec,lambda,Ruby On Rails,Ruby,Rspec,Lambda,对不起,我是Ruby的新手 我在RSpec测试中有这样的代码: it "if Add get empty string as parameter return 0" do lambda { StringCalculator.new(5).Add("") }.should == 0 end 它不起作用,因为lambda没有“应该”的方法。最重要的是lambda在这种情况下不会执行!我不确定,如果我不对,请告诉我 然后我尝试这样的代码: it "if Add get empty s
it "if Add get empty string as parameter return 0" do
lambda { StringCalculator.new(5).Add("") }.should == 0
end
它不起作用,因为lambda没有“应该”的方法。最重要的是lambda在这种情况下不会执行!我不确定,如果我不对,请告诉我
然后我尝试这样的代码:
it "if Add get empty string as parameter return 0" do
lambda { StringCalculator.new(5).Add("") }.call.should == 0
end
一切都很好,因为我使用了方法“call”,结果lambda执行了
我猜如果我们使用方法“调用”lambda,那么lambda就会执行
但是我尝试了这样的代码,但没有为lambda调用方法:
it "if Add get empty string as parameter return 0" do
lambda { StringCalculator.new().Add("") }.should raise_exception ArgumentError
end
我不使用“call”方法,但不知怎么的,测试通过了,这意味着lambda被执行了,因为.new()。
没有参数,所以引发了异常
请帮助我理解为什么在第三种情况下,如果lambda不应该被执行,那么会检测到异常?我不用电话
在第三种情况下,“call”方法的结果是相同的,我理解为什么
谢谢你的帮助
此外,StringCalculator类的代码:
class StringCalculator
def initialize(x)
@x = x
end
def Add(str)
if str == ""
0
end
end
end
需要执行一个块,在上一个示例中,您给出了一个块(即lambda)
在第一个示例中,如果要将should
与,例如=
一起使用,您只需要:
StringCalculator.new(5).Add("").should == 0
顺便说一下,在较新版本的RSpec中,您可以将其编写为:
expect(StringCalculator.new(5).Add("")).to eq 0