2016-05-23 3 views
0

Пусть у меня есть настройки, как это:RSpec контроллер для вложенных ресурсов, before_action

конфигурации/routes.rb

resources :graves do 
    resources :candles 
    end 

приложение/модели/grave.rb

has_many :candles, dependent: :destroy 

приложение/модели/свечи.rb

belongs_to :grave 

приложение/продолжение Ролики/candles_controller.rb

before_action :get_grave 

def create 
    @candle = @grave.candles.new(candle_params) 
    respond_to do |format| 
     if @candle.save 
     format.html { 
      redirect_to @grave, notice: 'Candle was successfully created.' 
     } 
     format.json { } 
     else 
     format.html { render :new } 
     format.json { render json: @candle.errors, status: :unprocessable_entity } 
     end 
    end 
end 

private 
def candle_params 
    params.require(:candle).permit(:name, :body) 
end 

def get_grave 
    @grave = Grave.find(params[:grave_id]) 
end 

спецификации/Контроллеры/candles_controller_spec.rb

describe CandlesController, type: :controller do 
    describe "POST create" do 
    before(:each) do 
     @grave = FactoryGirl.create(:grave) 
    end 
    it "creates candle" do 
     post :create, candle: { name: "Dummy name", body: "Dummy body", grave_id: @grave.id} 
     expect(response).to redirect_to(@grave) 
    end 
    end 
end 

Проблема заключается в том, когда я запускаю эту спецификацию я получаю эту ошибку:

1) CandlesController POST create creates candle Failure/Error: expect(response).to redirect_to(@grave) Expected response to be a < redirect >, but was <404>

Я проверил FactoryGirl и @grave создано так, что это не ноль. Когда я тестирую вручную, candle создан правильно и связан с grave. Любые подсказки, которые могут вызвать ошибку спецификации?

Rails 4.2, RSpec 3.x

ответ

1

Ваш маршрут будет выглядеть следующим образом: graves/:grave_id/candles, так что вы должны передать @grave.id вашему методу post в grave_id.

post :create, grave_id: @grave.id, candle: { name: "Dummy name", body: "Dummy body", grave_id: @grave.id} 

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

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