2017-10-15 6 views
-2

J'ai ce code ruby ​​pour mon joueur de classe et mon jeu de classe, je travaille dans le kata de tennis.Retour de la chaîne avec un attribut

class Player 
    def score 
    if @player_one.points <3 and @player_two.points<3 
     "#{@player_one.score} #{@player_two.score}" 
    elsif @player_one.points == @player_two.points 
     "#{@player_one.score} iguales" 
    end 

    if @player_one.points == 3 and @player_two.points == 3 
     'deuce' 
    elsif (@player_one.points == @player_two.points + 1) and (@player_two.points >=3) 
     "Ventaja #{@player_one.name}" 
    elsif (@player_one.points >= 4) and (@player_one.points >= (@player_two.points + 2)) 
     "Game #{@player_one.name}" 
    end 
    end 
end 

Et ce test ne peut pas passer, tous les autres tests qui ont déjà passé ne sont pas ici.

it 'return 30-iguales when both players have 2 points scored' do 
    player_one = Player.new 
    player_two = Player.new 

    game = TennisGame.new(player_one, player_two) 
    player_one.wins_point 
    player_one.wins_point 

    player_two.wins_point 
    player_two.wins_point 
    expect(game.score).to eq("30 iguales") 
    end 

L'erreur que je suis arrivé est que « 30 iguales » sont attendus mais ont nil. Tous mes autres tests ont passé, mais dans celui-ci échoue, et je ne peux pas résoudre le problème.

+0

Veuillez expliquer au début ce que votre code est destiné à faire. La plupart des lecteurs ne comprendront pas le «jeu de classe» et le «joueur de classe». –

Répondre

0

Les méthodes Ruby renvoient la dernière expression évaluée même sans une instruction explicite return, et je suppose que c'est ce que vous faites ici. Le problème est que pour les données de test, la méthode va évaluer "#{@player_one.score} iguales", mais continuez ensuite à évaluer la deuxième instruction if, et tomber tout le chemin à travers pour retourner nil.

Vos options pour résoudre sont:

  1. Faire la chose une seule if de déclaration au lieu de deux. Ou:
  2. Renvoie explicitement la valeur de chaque chaîne possible.