gpt4 book ai didi

ruby-on-rails - 测试method_defined? ActiveRecord 类在实例化之前不起作用

转载 作者:行者123 更新时间:2023-12-01 11:03:56 25 4
gpt4 key购买 nike

我在测试与 ActiveRecord 的数据库列相对应的方法时遇到问题。使用您拥有的任何模型(在我的情况下为 Document),然后执行以下操作:

$  rails c
Loading development environment (Rails 3.0.9)
>> Document.method_defined?(:id)
=> false
>> Document.new
=> #<Document id: nil, feed_id: nil >
>> Document.method_defined?(:id)
=> true

显然有一些 ActiveRecord 生命周期工作正在进行作为 .new() 的先决条件,它将所有数据库列作为方法添加到类中。

真正使事情复杂化的地方是在单元测试期间。我想要一个在运行时接受 ActiveRecord 类并对它们进行一些验证的类

例如
class Foo < ActiveRecord::Base
def work1
# something
end
end
class Command
def operates_on(clazz, method)
# unless I add a "clazz.new" first, method_defined? will fail
# on things like :id and :created_at
raise "not a good class #{clazz.name}" if ! clazz.method_defined?(method)
# <logic here>
end
end

describe Command do
it "should pass if given a good class" do
Command.new.operates_on(Foo,:work1)
end
it "should pass if given a database column" do
# this FAILS
Command.new.operates_on(Foo,:id)
end
it "should raise if given an invalid class/method combo" do
lambda { Command.new.operates_on(Foo,:non_work) }.should raise_error
end
end

我可以做些什么来断言(除了使用 .new() 制作垃圾实例)ActiveRecord 已完成其初始化?

最佳答案

这似乎是一个错误,但不太可能很快得到修复。

Inconsistent method_defined? behaviour

我找到了 .attribute_method?在类里面工作以做您需要的事情。您可以在 ActiveRecord::AttributeMethods::ClassMethods 找到更多信息

关于ruby-on-rails - 测试method_defined? ActiveRecord 类在实例化之前不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8013773/

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