2016-11-28 46 views
-1

我正在使用Sinatra和rspec-capybara進行測試來製作一個簡單的Rock,paper,scissors遊戲。遊戲對抗計算機對手,隨機選擇岩石,紙張或剪刀。我正在爲網頁結果編寫一個測試。我磕碰對手的反應始終選擇紙讓玩家失去了(因爲他選擇的岩石)從水豚特徵測試中消除隨機性

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

雙打不能通過水豚功能測試。雙打只能在單元測試中使用!以下代碼通過。

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!")