你如何 return 从散列数组 Ruby 中获取名称 TDD

How do you return a name from an array of hashes Ruby TDD

首先我是编程新手,这就是问题

这是规范

require 'minitest/autorun'
require_relative '../pet_shop'

class TestPetShop < Minitest::Test
  def setup
    @customers = [{
      name: "Craig",
      pets: [],
      cash: 1000
    }, {
      name: "Zsolt",
      pets: [],
      cash: 50
    }]

    @new_pet = {
      name: "Bors the Younger",
      pet_type: :cat,
      breed: "Cornish Rex",
      price: 100
    }

    @pet_shop = {
      pets: [{
        name: "Sir Percy",
        pet_type: :cat,
        breed: "British Shorthair",
        price: 500
      }, {
        name: "King Bagdemagus",
        pet_type: :cat,
        breed: "British Shorthair",
        price: 500
      }, {
        name: "Sir Lancelot",
        pet_type: :dog,
        breed: "Pomsky",
        price: 1000,
      }, {
        name: "Arthur",
        pet_type: :dog,
        breed: "Husky",
        price: 900,
      }, {
        name: "Tristan",
        pet_type: :dog,
        breed: "Basset Hound",
        price: 800,
      }, {
        name: "Merlin",
        pet_type: :cat,
        breed: "Egyptian Mau",
        price: 1500,
      }],
      admin: {
        total_cash: 1000,
        pets_sold: 0,
      },
      name: "Camelot of Pets"
    }
  end

  def test_find_pet_by_name__returns_pet
    pet = find_pet_by_name(@pet_shop, "Arthur")
    assert_equal("Arthur", pet[:name])
  end
end

这是我的答案

  def find_pet_by_name(shop)
    pets = []

    for pet in shop[:pets]
      if pet[:name] == name
       return pet
      end
    end

    return pets 
  end

不断收到错误的参数数量错误,请记住我显然不知道自己在做什么,因为我是新编程。

您正在此处调用 find_pet_by_name(shop) 方法:

pet = find_pet_by_name(@pet_shop, "Arthur")

正如评论者所提到的,您在调用该方法时传递了 2 个参数:@pet_shop"Arthur"。但是您的方法定义只允许传入 1 个参数:shop。所以你的方法调用应该是:

pet = find_pet_by_name(@pet_shop)

不需要传入 "Arthur",因为该方法不需要(或不允许)该信息。因此,您收到 'wrong number of arguments' 错误。