rspec错误中的布尔比较

时间:2013-09-27 13:49:06

标签: ruby rspec2

在Rspec中,我正在尝试测试函数的近似返回值。

我定义了以下内容:

def approx_equals(val, expected, perc_error_accepted)
    margin = (expected * perc_error_accepted / 100)
    return val >= expected - margin && val <= expected + margin
end

现在我想以这种方式测试我的功能:

describe Foo do
  context "comparing return values" do
    expect(approx_equals(obj.datas[:bar], 500, 10)).to eq(true)
  end
end

但我收到以下错误:undefined method 'expect' for #<Class:0x3cf5340> (NoMethodError)

我也尝试了以下内容:

describe Foo do
  context "comparing return values" do
    approx_equals(obj.datas[:bar], 500, 10).should == true
  end
end

但是如果发生故障,rspec会停止执行,这对我来说不是一个好的解决方案。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

context中的{p> RSpec不是测试,它们只是describe的别名。将代码放在it块中,它会起作用。

describe Foo do
  it "compares return values" do
    expect(approx_equals(obj.datas[:bar], 500, 10)).to eq(true)
  end
end

修改

此外,你应该像这样使用RSpec匹配器:

expect(approx_equals(obj.datas[:bar], 500, 10)).to be_true

它会在失败时为您提供更好的输出。

在RSpec3上,匹配器已从be_true更改为be true

答案 1 :(得分:1)

您的测试应位于it {}块内。即:

describe Foo do
    context "comparing return values" do
        it { approx_equals(obj.datas[:bar], 500, 10).should == true }
    end
end

project docs

提供更多信息

答案 2 :(得分:0)

如果你想做一些be_boolean我认为方法是将rspec_boolean添加到组中的Gemfile:development,:test:

gem&#39; rspec_boolean&#39;

而且你可以在测试中使用be_boolean

实施例: expect(val.is_done?)。to be_boolean