2

以下は、Rubyコードの小さな部分に対して私が書いた単体テストです。

subject { AutoShop.new 'Mr. Fix It', 'WA987654321', Employee.new('Sue', 'Owner', 0) }

it '#employee_list returns list of employee names' do
  # setup
  input = [Employee.new('Lou', 'Receptionist', 90_000)]
  subject.append_employees input
  subject.employee_list.should eq "Sue\nLou"
end

そして、これがクラスのコードです。ただし、employee_listメソッドで正しく表示される名前を取得できません。私はRubyを初めて使用するので、提案をいただければ幸いです。

class AutoShop < Business

    attr_accessor :employees

  def initialize(name, tax_id, employee)
    super(name, tax_id)
    @employees = []
    @employees << employee
  end   

  def append_employees(input)
    input.map { |x| @employees << x  }  
  end

  def employee_list
    @employees.map {|x| x.name}
  end   

end     
4

2 に答える 2

4

単体テストemployee_listに基づくメソッドでは、各名前を改行で区切って出力する必要があります\n。したがって、を追加し.join("\n")て、配列から文字列を生成します。

def employee_list
  @employees.map {|x| x.name }.join("\n")
end  

これ.mapは、「プレッツェルコロン」の省略形でも実行できます。

@employees.map(&:name).join("\n")
于 2013-02-11T01:43:06.860 に答える
1

@MichaelBerkowskiはすでにあなたの主な質問に答えていますが、私はあなたのappend_employees方法が少し奇妙に見えることに注意を払います。Array#eachそこではなく、使用する可能性がArray#mapありました。変数はその変更の影響を@employees受けませんが、戻り値は異なります(不必要にメモリをゴージャスにします)。比較:

2.0.0-preview2 :001 > input = [1, 2, 3, 4]
 => [1, 2, 3, 4] 
2.0.0-preview2 :002 > e = [] ; input.each { |x| e << x  }
 => [1, 2, 3, 4] 
2.0.0-preview2 :003 > e = [] ; input.map { |x| e << x  }
 => [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] 
于 2013-02-11T05:34:46.963 に答える