2016-08-26 3 views
0

Я пытаюсь сделать двойной тест для экземпляра класса с RSpec. Скажем, у меня есть тест, который принимает объект File только как аргумент.Правильный способ удвоить экземпляр класса с помощью RSpec?

Отлично, теперь, как мне сделать двойной, чтобы мне не нужно было передавать фактический файл со всеми моими спецификациями?

let(:file) { double(File) } 
raise "NOT A FILE" unless file.is_a? File 
# => RuntimeError: NOT A FILE 

Я также попытался это:

let(:file) { instance_double(File) } 
raise "NOT A FILE" unless file.is_a? File 
# => RuntimeError: NOT A FILE 

И это (что ожидает фактического файла):

let(:file) { object_double(File.new) } 
# => ArgumentError: wrong number of arguments 

Что я делаю неправильно?

ответ

2

Вы можете просто заглушить звонок is_a?.

file = instance_double(File) 
allow(file).to receive(:is_a?).with(File).and_return(true) 
Смежные вопросы