2016-08-27 2 views
1

새로운 콘텐츠를 만드는 사용자를 위해 내 기능 테스트에 문제가 있습니다. 내 컨트롤러에서이 행을 주석 처리하거나 삭제할 때만 전달됩니다. 팩토리처럼 보입니다. 사용자는 새 콘텐츠를 만들 수 없습니다. 나는 별도의 테스트를 사용하여 새로운 단어를 생성 할 수있는 능력이 있는지를 확인하기 위해 공장을 점검했다. 여기서 어떤 문제가있을 수 있습니까?Rspec을 사용하는 동안 Cancancan 보석

authorize! :create, @word, :message => "Musisz się zalogować, aby dodać nowe słówko." 

words_controller.rb

def create 
    authorize! :create, @word, :message => "Musisz się zalogować, aby dodać nowe słówko." 
    @user = current_user 
    @word = @user.words.build(word_params) 

    respond_to do |format| 
     if @word.save 
     format.html { 
      redirect_to new_word_path 
      flash[:notice] = 'Słówko zostało prawidłowo zapisane. Dodaj następne!' 
     } 
     format.json { render :show, status: :created, location: @word } 
     else 
     format.html { render :new } 
     format.json { render json: @word.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

user_creates_word_spec.rb

require 'spec_helper' 

feature 'User creates word' do 


    before(:all) do 

    category = FactoryGirl.create(:category) 

    10.times { word = FactoryGirl.create(:word) } 

    sign_in 
    expect(page).to have_content 'Wyloguj się' 
    visit game_words_path 
    click_link('Dodaj słówko') 
    end 

    scenario 'with valid input' do 
    fill_in 'Angielski', with: 'house' 
    fill_in 'Polski', with: 'dom' 
    find(:css, ".check_boxes[value='1']").set(true) 
    click_button 'Zapisz' 
    expect(page).to have_content 'Słówko zostało prawidłowo zapisane.' 
    end 

end 

테스트 사용자 공장 나는이 라인을 변경

it "can create new word" do 
    user = FactoryGirl.create(:user) 
    ability = Ability.new(user) 
    word = Word.new(user: user) 
    expect { ability.should be_able_to(:create, word)} 
end 

답변

1

새로운 단어를 만들 수있는 능력을 가지고 있는지 확인하기 :

authorize! :create, @word, :message => "Musisz się zalogować, aby dodać nowe słówko." 
@user = current_user 
@word = @user.words.build(word_params) 

:

@user = current_user 
@word = @user.words.build(word_params) 
authorize! :create, @word, :message => "Musisz się zalogować, aby dodać nowe słówko." 

그리고 그것을 잘 작동합니다. 이전 버전 변수에서 @word는 승인 한 후에 결정되었습니다! 메서드가 제대로 작동하지 않습니다.

관련 문제