gpt4 book ai didi

ruby-on-rails-3 - 对 ActiveRecord 模型中包含的模块进行单元测试

转载 作者:行者123 更新时间:2023-12-04 17:56:56 26 4
gpt4 key购买 nike

我有一个这样的模块(但更复杂):

module Aliasable 
def self.included(base)
base.has_many :aliases, :as => :aliasable
end
end

我包括在几个模型中。目前为了测试,我制作了另一个模块,如下所示,我只是将其包含在测试用例中
module AliasableTest 
def self.included(base)
base.class_exec do
should have_many(:aliases)
end
end
end

问题是我如何单独测试这个模块?或者上述方式是否足够好。似乎有可能有更好的方法来做到这一点。

最佳答案

首先,self.included 不是描述模块的好方法,而且 class_exec 不必要地使事情复杂化。相反,您应该 extend ActiveSupport::Concern ,如:

module Phoneable
extend ActiveSupport::Concern

included do
has_one :phone_number
validates_uniqueness_of :phone_number
end
end

您没有提到您正在使用什么测试框架,但 RSpec 完全涵盖了这种情况。试试这个:
shared_examples_for "a Phoneable" do
it "should have a phone number" do
subject.should respond_to :phone_number
end
end

假设您的模型如下所示:
class Person              class Business
include Phoneable include Phoneable
end end

然后,在您的测试中,您可以执行以下操作:
describe Person do
it_behaves_like "a Phoneable" # reuse Phoneable tests

it "should have a full name" do
subject.full_name.should == "Bob Smith"
end
end

describe Business do
it_behaves_like "a Phoneable" # reuse Phoneable tests

it "should have a ten-digit tax ID" do
subject.tax_id.should == "123-456-7890"
end
end

关于ruby-on-rails-3 - 对 ActiveRecord 模型中包含的模块进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658038/

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