gpt4 book ai didi

ruby-on-rails - Ruby lambda 执行与规范中的 should

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:49 25 4
gpt4 key购买 nike

抱歉,我是 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 就会执行。

但后来我尝试了这样的代码 WITHOUT CALL method for 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

最佳答案

raise_error需要一个 block 来执行,在你的最后一个例子中,你给了一个 block (即你的 lambda)。

在您的第一个示例中,如果您想将 shouldequality matcher 一起使用,比如 == 你只需要:

StringCalculator.new(5).Add("").should == 0

顺便说一下,在较新版本的 RSpec 中,您可以将其写为:

expect(StringCalculator.new(5).Add("")).to eq 0

关于ruby-on-rails - Ruby lambda 执行与规范中的 should,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com