ruby - 如何检查我的主题是否引发异常?

标签 ruby rspec rspec3

我目前正在 subject 中创建一个对象,需要测试这是否会引发异常。以下代码说明了我要实现的目标:

describe MyClass do
  describe '#initialize' do
    subject { MyClass.new }

    it { is_expected.not_to raise_error(Some::Error) }
  end
end

我有一种感觉,我正在以错误的方式处理这件事。将 subject 设置为新对象而不创建对象两次的首选方法是什么?


更新

我的问题有两个。首先,这种语法不起作用:

it { is_expected.not_to raise_error }

但是,在 it block 中使用 expect 确实如此(正如 Jimmy Cuadra 所指出的):

it 'does not raise an error' do
  expect { subject }.not_to raise_error
end

我对 RSpec 还不够熟悉,无法告诉你这是为什么。

其次,自 RSpec 3.0.0.beta1 , 可以更长的时间将 raise_error 与特定的错误类一起使用。因此,以下内容无效:

expect { subject }.to raise_error(Some::Error)

有关详细信息,请参阅

最佳答案

如果我没理解错的话,您是在尝试测试实例化一个类是否会导致异常。你只需这样做:

describe MyClass do
  it "doesn't raise an exception when instantiated" do
    expect { subject }.not_to raise_error
  end
end 

关于ruby - 如何检查我的主题是否引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983923/

相关文章:

ruby-on-rails - mongoid - 使用包含选择 1..N 引用关系中的子对象

ruby - 添加的实例变量未在 Ruby 中使用 inspect 显示

ruby - 使用正则表达式在 Ruby 中查找精确的模式匹配

ruby - ruby do block 的 Sublime Text 2 自动完成错误

javascript - 如何从 rspec 集成测试中获取 nyc/istanbul JavaScript 覆盖率

ruby-on-rails - 如何在 RSpec 中模拟数组?

ruby-on-rails - 使用 Rails 和 Rspec,如何测试数据库未被方法触及

ruby-on-rails - 使用 RSpec 测试模型时出现错误 "undefined method ` <' for nil:NilClass"。

ruby-on-rails - 除非明确添加 :type => :controller,否则 RSpec Controller 规范不起作用

ruby-on-rails - 如何在 RSpec 中测试空白/空字符串以进行包含验证?