2015-08-13 6 views
0

У меня есть функция контроллера:RSpec «Разрешить» заглушка не устанавливать переменные

def update 
    @simulation = Simulation.find(params[:id]) 
    @simulation.next 
    puts "--" 
    puts @simulation.dirty? 
    puts @simulation.save 

    if (@simulation.save && @simulation.dirty?) 
     render :partial => 'show', :object => @simulation 
    end 
end 

И в RSpec тест:

it "should render a partial when the record is dirty" do 
     allow(@simulation).to receive('dirty?') { true } 

     put :update, :id => @simulation.id, :format => 'js' 

     expect(response).to render_template(:partial => 'show') 
    end 

тест не в состоянии вынести мнение потому, что если проверка не проходит, потому что он не вернет true для @ simulation # грязный? даже несмотря на то, что функция заштрихована. Я вижу это из-за пометок в контроллере. Любые идеи, почему это не работает?

ответ

1

Переменная экземпляра @simulation, которую вы выполняете, не принадлежит экземпляру контроллера, а экземпляру класса экземпляра rspec. Попробуйте @simulation.dirty? внутри него блок rspec, после вызова метода allow. Я предполагаю, что он возвращает true. Тем не менее, @simulation в контроллере не обрезается. Это два разных объекта.

Если вы хотите заглушить @simulation в методе обновления контроллера, вы должны заглушить весь экземпляр класса Simulation. Попробуйте использовать allow_any_instance_of вместо allow(@simulation).

allow_any_instance_of(Simulation).to receive(:dirty?).and_return(true) 

https://github.com/rspec/rspec-mocks#settings-mocks-or-stubs-on-any-instance-of-a-class

+0

Это дает мне 'NoMethodError: неопределенный метод' предков для # ' – NNNNNNNNNNDelicious

+0

Какой метод в сообщении об ошибке отсутствует? – tyamagu2

+0

2) SimulationsController PUT #update должны оказывать частичное, когда запись загрязнен Сбой/Ошибка: allow_any_instance_of (@simulation) .чтобы получить (: немытый) and_return (правда) NoMethodError:. неопределенный метод 'предков для # <Моделирование: 0x007fd0d1925a50> – NNNNNNNNNNDelicious

 Смежные вопросы

  • Нет связанных вопросов^_^