Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby lambda的执行应该在规范中_Ruby On Rails_Ruby_Rspec_Lambda - Fatal编程技术网

Ruby on rails Ruby lambda的执行应该在规范中

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

对不起,我是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 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