ruby - RSpec 在带参数的方法上测试 ArgumentError

标签 ruby unit-testing rspec

我在让这个简单的测试通过 RSpec 2.8 时遇到了问题。

我想编写一个简单的测试来检测需要参数的方法是否缺少参数(即 ArgumentError:参数数量错误('x' 代表 'y'))。

我的测试是像这样测试一个 Gem 模块方法:

describe "#ip_lookup" do
  it "should raise an ArgumentError error if no parameters passed" do
    expect(@geolocater.ip_lookup).to raise_error(ArgumentError)
  end
end

我的 gem 模块代码如下所示:

module Geolocater
  def ip_lookup(ip_address)
   return ip_address
  end
end

我的规范使用此输出运行。

Failure/Error: expect(@geolocater.ip_lookup).to raise_error(ArgumentError)
     ArgumentError:
       wrong number of arguments (0 for 1)
     # ./lib/geolocater.rb:4:in `ip_lookup'
     # ./spec/geolocater_spec.rb:28:in `block (3 levels) in <top (required)>'

我在这里错过了什么?

最佳答案

您需要将一个 block 传递给#expect,而不是常规参数:

describe "#ip_lookup" do
  it "should raise an ArgumentError error if no parameters passed" do
    expect { @geolocater.ip_lookup }.to raise_error(ArgumentError)
  end
end

关于ruby - RSpec 在带参数的方法上测试 ArgumentError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8822085/

相关文章:

flutter - 使用 mocktail 包进行单元测试时,类型 'Null' 不是类型 'Future<void>' 的子类型

ruby-on-rails - 如何使用rspec规范装饰器。

mysql - Debian Ruby 安装路径

ruby-on-rails - 用于显示操作的 URL 中的自定义参数

css - Sass -- 在 Linux 上观察错误

javascript - 将 angular-route 1.5.0 更新为 1.5.1 时出现 Karma 错误

java - 使用和测试生成的映射器的正确方法

ruby-on-rails - Rspec/Rails4,对象属性更新未保留在 Controller 规范中?

mysql错误: can't destroy an object that is created using factoryGirl

ruby - 用新行替换文本文件中的行