ruby - 预期异常,但使用 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
解决方案
您的断言语法看起来不正确。raise_error匹配器需要将预期的异常作为参数而不是作为块传递。
代替:
expect { my_code }.to raise_error { 'Oops!' }
你需要使用:
expect { my_code }.to raise_error('Oops!')
或匹配器的任何替代形式。
推荐阅读
- node.js - 获取完整的路由 url expressJs
- node.js - DirectLine API:定义新的 ChannelId
- typescript - 我想发明的 FP 的轮子叫什么名字?(见代码)
- iframe - 无法在 Joomla 中嵌入 iframe
- laravel - 带有上传文件的Laravel单元测试无法获取文件
- google-apps-script - 根据单元格中的值将行的一部分从一个谷歌电子表格复制到另一个谷歌电子表格?
- javascript - 在没有重定向的情况下更新 URL 不起作用
- python - 将 python 列表写为 CSV
- sql - 返回组内的总百分比
- python - 如何在不单击 tkinter python 的情况下读取单选按钮值