首页 > 解决方案 > 预期异常,但使用 Rspec 未引发任何异常。当变量为空时尝试引发错误

问题描述

我试图通过最后一个测试,试图引发一个我无法让它工作的异常。有什么我没看到的吗?我一直在寻找几个小时并寻找答案,提前感谢任何可能对此做出回应的人。

错误信息 :

失败/错误:expect{birthday_list.show_birthdays}.to raise_error{'No birthdays avalible!'} 预期异常,但没有引发

测试:



describe BirthdayList do
birthdays = @birthdays
birthday_list = BirthdayList.new


describe '#add' do
  it 'adds a birthday to the list' do
    expect(birthday_list.add('name','date')).to eq   ([{:dates=>"date", :names=>"name"}])
  end
end

describe '#show_birthdays' do
  it 'throws an error when there is no birthdays' do
  @birthdays = []
    expect{birthday_list.show_birthdays}.to raise_error{'No birthdays avalible!'}
  end

  it 'prints all birthdays' do


    expect(birthday_list.show_birthdays).to eq "name, date\n"
  end
end

end

和代码


class BirthdayList
  def initialize
    @birthdays = []
  end

  def add name,date
    birthday = {:names => name, :dates => date }
    @birthdays.push(birthday)
  end

 def show_birthdays
   raise 'No birthdays avalible!' unless @birthdays
   
   list_to_print = ''

   @birthdays.each do |b|
     print "#{b[:names]}, #{b[:dates]} \n"
   end

   @birthdays.each do |b|
     list_to_print += "#{b[:names]}, #{b[:dates]}\n"
   end

   list_to_print
end

 end

标签: rubyunit-testingtestingrspec

解决方案


您的断言语法看起来不正确。raise_error匹配器需要将预期的异常作为参数而不是作为块传递。

代替:

  expect { my_code }.to raise_error { 'Oops!' }

你需要使用:

  expect { my_code }.to raise_error('Oops!')

或匹配器的任何替代形式。


推荐阅读