我如何返回包含哈希的数组的数组?

问题描述 投票:0回答:1

这是我的由测试函数调用的方法:

def movies_with_directors_set(source)       
  director = []
  director1 = []
  hash = {}

  while outer_index < source.length do
    inner_index = 0

    while inner_index < source[outer_index][:movies].length do
      hash[:title] = []
      hash[:title] = source[outer_index][:movies][inner_index][:title]
      hash[:director_name] = []
      hash[:director_name] = source[outer_index][:name]

      director1 << hash.dup

      inner_index +=1
    end

    director <<  director1.dup 

    outer_index += 1
  end


  return director
end

这是测试代码:

 describe 'movies_with_directors_set' do
  describe 'when given a Hash with keys :name and :movies,' do
    describe 'returns an Array of Hashes that represent movies' do
      describe 'and each Hash has a :director_name key set with the value that was in :name' do
        # This lets "sample_data" be used in the two "it" statements below
        let (:test_data) {
          [
            { :name => "Byron Poodle", :movies => [
              { :title => "At the park" },
              { :title => "On the couch" },
            ]
            },
            { :name => "Nancy Drew", :movies => [
              { :title => "Biting" },
            ]
            }
          ]
        }

        it 'correctly "distributes" Byron Poodle as :director_name of the first film' do
          # { :name => "A", :movies => [{ :title => "Test" }] }
          # becomes... [[{:title => "Test", :director_name => "A"}], ...[], ... []]
          results = movies_with_directors_set(test_data)
          expect(results.first.first[:director_name]).to eq("Byron Poodle"),
            "The first element of the AoA should have 'Byron Poodle' as :director_name"
        end

        it 'correctly "distributes" Nancy Drew as :director_name of the last film' do
          results = movies_with_directors_set(test_data)
          expect(results.last.first[:director_name]).to eq("Nancy Drew"),
            "The last element of the AoA should have 'Nancy Drew' as :director_name"
        end
      end
    end
  end
end

我的方法返回一个哈希数组,但是由于某种原因,它不想通过测试,因为它告诉我测试的第二部分失败。由于测试的措辞方式不同,可能需要数组中的数组。任何见解都会有所帮助。 Source是作为参数放入方法中的数据库,此特定数据库显示在测试代码中。

arrays ruby hash
1个回答
0
投票
您的测试数据和测试期望似乎不同步。您有一个:name键,然后期望:director_name存在于您的测试哈希中。将:director_name更改为:name,它应该通过。

{ :name => "Nancy Drew", :movies => [

expect(results.last.first[:director_name]).to eq("Nancy Drew")

所以您的考试不及格可能是说类似expected nil to be "Nancy Drew",对吧?

© www.soinside.com 2019 - 2024. All rights reserved.