gpt4 book ai didi

ruby-on-rails - 在 Rails 中测试方法

转载 作者:行者123 更新时间:2023-11-28 21:15:38 26 4
gpt4 key购买 nike

我正在用 Rails 编写我的第一个测试,我有一个方法可以检查通过动物对象传递的名称是否有效。 (如果有效则返回名称,否则返回 nil)

animal_verifier.rb

# frozen_string_literal: true

class AnimalVerifier
def initialize(last_sync_at, force_sync_ids)
@last_sync_at = last_sync_at
@force_sync_ids = force_sync_ids
end

def valid_animals
animals.each do |animal|
if !is_valid_animal(animal.name)
Rails.logger.info("Invalid animal name")
next
end
end
end

def is_valid_animal(animal_name)
animal = AnimalFinder.find(animal_name)
end

end

animal_verifier_test.rb

require 'test_helper'

class AnimalVerifierTest < ActiveSupport::TestCase

test "valid animal" do
valid_animal = @is_valid_animal.send("Beluga")
assert valid_animal?, "valid animal"
puts valid_animal.errors unless valid_animal.errors.empty?
end

test "invalid animal" do
valid_animal = @is_valid_animal.send("Puddle")
assert valid_animal?, "invalid animal"
puts valid_animal.errors unless valid_animal.errors.empty?
end
end

当我运行此测试时出现错误:

NoMethodError:         NoMethodError: undefined method `Beluga' for nil:NilClass

这是否意味着我没有AnimalVerifier 类?我只是想测试一下具体的方法。

最佳答案

@is_valid_animal从未在您的测试中初始化,所以它是 nil ,这就是您看到错误 undefined method ... for nil:NilClass 的原因.您应该首先创建一个被测对象,然后调用该对象的方法。

当您调用 object.send("Beluga") 时, 消息“Beluga”被发送到 object并尝试调用名为 Beluga 的方法.如果在默认情况下找不到它,则会引发错误 undefined method Beluga

您的测试应该更像:

  test "valid animal" do
verifier = AnimalVerifier.new(last_sync_at, force_sync_ids) # you need to init those thow params that are passed to the constructor
valid_animal = verifier.is_valid_animal("Beluga")
assert valid_animal, "valid animal"
puts valid_animal.errors unless valid_animal.errors.empty?
end

请注意,我删除了附加到方法和变量名称的问号。

关于ruby-on-rails - 在 Rails 中测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com