【发布时间】:2017-01-03 01:59:29
【问题描述】:
我目前正在尝试使用以下代码引发错误:
class NasaController
attr_reader :plateau, :current_rover
def initialize(plateau:)
@plateau = plateau
@current_rover = []
end
def link_to_rover(robotic_rover)
raise ArgumentError, "#{robotic_rover.class}" unless robotic_rover.is_a? RoboticRover
@current_rover = robotic_rover
end
end
它有效!伟大的!但是…………
我的测试是:
describe NasaController do
subject(:controller) { described_class.new(plateau: plateau) }
let(:robotic_rover) do
double(:robotic_rover, #some_methods...)
end
let(:plateau) { double(:plateau, rover_landed: landed_rover) }
describe 'interacting with a rover' do
context 'when a RoboticRover is used' do
before { controller.link_to_rover(robotic_rover) }
it 'can create a link' do
expect(controller.current_rover).to eq robotic_rover
end
context 'when something other than a RoboticRover is used' do
it 'raises an error at #link_to_rover' do
expect { controller.link_to_rover(plateau) }.to raise_error 'Error!'
end
end
end
end
这导致我的第二次测试通过,因为 controller.link_to_rover(plateau) 没有链接 RoboticRover。
但是,我的第一次失败了,因为controller.link_to_rover(robotic_rover) 也不是 RoboticRover,它是 RoboticRover 的双倍。有人对解决此问题有任何指导吗?
【问题讨论】:
标签: ruby rspec error-handling exception-handling mocking