2015-09-10 3 views
1

У меня возникают трудности с написанием спецификации для действия индекса контроллера, пытающегося проверить. Контроллер выглядит следующим образом:index rspec test failing

class MyGamesResultsController < ApplicationController 
    def index 
    @contest = Contest.find(params[:contest_id]) 
    @my_entry = current_user.entries.where(contest_id: params[:contest_id]) 
    @points_per_player = @my_entry[0].points_per_player 
    @total_points = @my_entry[0].total_points 
    end 
end 

и мой спецификации выглядит следующим образом:

require 'rails_helper' 

RSpec.describe MyGamesResultsController, type: :controller do 
    describe 'GET /index' do 
     let!(:user) { create(:user) } 

     before :each do 
     sign_in user 
     get :index 
     end 

    it 'renders the index template' do 
    expect(subject).to render_template(:index) 
    end 
    end 
end 

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

Сбой/Ошибка: получаем: индекс ActiveRecord: : RecordNotFound: Не удалось найти Конкурс с 'id' =

Может ли кто-нибудь выяснить, что не так?

+1

Ваш тест симулировать запрос GET к '/ index', но в вашем контроллере вы используете' Params [: contest_id] ', чтобы найти запись Contest. Вы уверены, что этот 'contest_id' указан в хэше params в вашем тесте? – MrYoshiji

+0

Я не думаю, что contest_id задан в хэше params в моем тесте. Как мне это сделать? Мне жаль, что я должен был упомянуть, что я новичок в rails – NdaJunior

+0

Я думаю, что это так просто, как следующее: 'get: index, contest_id: some_id' (где переменная' some_id' содержит фактический идентификатор конкурса, который вы можете найти перед вызовом 'get') – MrYoshiji

ответ

0

Решено! должен был сделать это:

require 'rails_helper' 

RSpec.describe MyGamesResultsController, type: :controller do 
    describe "GET index" do 

    let!(:user) { create(:user) } 
    let!(:contest) { create(:contest) } 
    let!(:my_entry) { create(:entry, user_id: user.id, contest_id: contest.id) } 


    before :each do 
    sign_in user 
    get :index, contest_id: contest.id 
    end 

    it "renders the index template" do 
    (expect (response.status)).to eql(200) 
    end 
end 
end