下面是我为一小段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 "SuenLou"
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
基于单元测试的employee_list
方法应该输出由换行符n
分隔的每个名称。因此,添加一个.join("n")
来从数组中生成一个字符串。
def employee_list
@employees.map {|x| x.name }.join("n")
end
.map
也可以用"椒盐卷饼冒号"的简写来完成:
@employees.map(&:name).join("n")
虽然@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]]