2016-11-28 21 views
-1

Я делаю простую игру из камня, бумаги, ножниц с использованием Sinatra и тестирования с rspec-capybara. Игра играет против компьютерного противника, который рандомизирует либо рок, бумагу, либо ножницы. Я пишу тест для результата веб-страницы. Я гася реакцию противника всегда выбирать бумагу таким образом, что игрок проигрывает (потому что он выбирает рок)удаление случайности из теста capybara

scenario "Player chooses rock, and the computer chooses paper." do 
single_player_sign_in_and_play 
click_button('rock') 
allow(game).to receive_message_chain(:player2, :weapon) {:paper} 
allow(game).to receive(:outcome).and_return("You lose!") 
allow(game).to receive(:message).and_return("Your opponent chose #{game.player2.weapon}. #{game.outcome}") 
expect(page).to have_content("Your opponent chose paper. You lose!") 

конца

Я хочу, чтобы противник всегда иметь: документ, как оружие, так что игрок теряет: На странице должно быть содержание: «Ваш оппонент выбрал бумагу, вы проиграли!»

+0

Это еще возвращает случайное поведение от соперника! –

+0

чего вы хотите достичь? непонятно – fabersky

+0

Я хочу, чтобы у оппонента всегда была: бумага как оружие, так что проигрыватель проигрывает: страница должна иметь контент: –

ответ

0

Вы должны окурок вызовы перед вызовом click_button('rock')

scenario "Player chooses rock, and the computer chooses paper." do 
    allow(game).to receive_message_chain(:player2, :weapon) {:paper} 
    allow(game).to receive(:outcome).and_return("You lose!") 
    allow(game).to receive(:message).and_return("Your opponent chose paper. You lose!") 
    single_player_sign_in_and_play 
    click_button('rock') 
    expect(page).to have_content(game.message) 
end 

Я бы рекомендовал не использовать game.message в ожидании и использовать Your opponent chose paper. You lose! вместо этого. Вы также можете рассмотреть возможность перемещения шпунтов на before блок

0

Парные разряды не могут быть переданы в тесте Capybara. Удваивания следует использовать только в модульных тестах! Следующий код проходит.

scenario "Player chooses rock, and the computer chooses paper." do 
allow_any_instance_of(Opponent).to receive(:weapon).and_return(:paper) 
single_player_sign_in_and_play 
click_button('rock') 
save_and_open_page 
expect(page).to have_content("Your opponent chose paper. You lose!") 

конец