0

我是一个新手,正在努力通过测试。我有 3 个班级,艺术家、歌曲和流派。我试图通过的测试如下:

test 'A genre has many artists' do
 genre = Genre.new.tap{|g| g.name = 'rap'}

 [1,2].each do
  artist = Artist.new
  song = Song.new
  song.genre = genre
  artist.add_song(song)
 end

assert_equal genre.artists.count, 2
end

这是我的艺术家课程,我需要调整 add_song 方法。当一首歌被添加到艺术家时,我试图实例化一个新的流派对象并将艺术家也添加到该流派中。虽然目前不工作,但当我调用genre.artists 时,它返回一个空数组。类艺术家 attr_accessor :name, :songs, :genres, :genre, :artists @@artists = []

 def initialize(name = name, genre = genre)
  @artists = []
  @songs = []
  @genre = genre
  @genres = []
  @name = name
  @@artists << self
 end

 def self.all
  @@artists
 end

 def self.reset_artists
  @@artists = []
 end

 def self.count
  self.all.size
 end

 def songs_count
  self.songs.size
 end

 def count
  self.size
  end

  def add_song(song)
   @songs << song
   @genres << song.genre
   Genre.new(self)
   end
  end

 class Genre
 attr_accessor :name, :songs, :artists
 @@genres = []

 def initialize(artists = artists)
  @songs = []
  @artists = artists
  @name = name
  @@genres << self
 end

 def count
  self.artists.count
  end

 def self.all
  @@genres
 end

 def self.reset_genres
  @@genre = []
 end 
end

class Song
attr_accessor :name, :genre, :artist

def initialize(name = name, artist = artist, genre = genre)
 @name = name
 @artist = artist
 @genre = genre
 end
end
4

2 回答 2

0

您将在方法中返回一个使用当前艺术家创建一个新的流派实例add_song。你可以通过几种方式让你的测试通过。

这会将艺术家添加到歌曲实例中引用的流派。

def add_song(song)
  @songs << song
  @genres << song.genre
  song.genre.artists << self
end

如果您想从 add_song 方法返回一个新的 Genre 实例,第二个选项将是修复您的测试。这很可能不是您想要的,但是这会将艺术家设置为流派中的参考。

test 'A genre has many artists' do
  genre = Genre.new.tap{|g| g.name = 'rap'}

 [1,2].each do
   art ist = Artist.new
   song = Song.new
   song.genre = genre
   genre = artist.add_song(song)
 end 

 assert_equal genre.artists.count, 2
end
于 2012-07-08T15:56:34.463 回答
0

当您创建一个新艺术家时,您将其添加到Artist::artists- 的类变量中Artist。您测试的数组是genre.artists- 的对象变量Genre。这是一个与 不同的变量Artist::artists,我没有看到你genre.artists在代码中的任何地方更新 - 我很惊讶它甚至是一个数组,看到你没有将它初始化为一个数组......

于 2012-07-08T15:51:03.737 回答