gpt4 book ai didi

ruby - 我怎样才能对我的默认范围进行 rspec 测试

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:13 24 4
gpt4 key购买 nike

我的模型有 default_scope(:order => 'created_at' )我的测试(rspec、factory girl、shoulda 等)是:

require 'spec/spec_helper.rb'

describe CatMembership do
context "is valid" do
subject { Factory.build(:cat_membership) }
it { should be_valid }
it { should belong_to :cat}
it { should belong_to :cat_group}
it { should have_db_column(:start_date)}
it { should have_db_column(:end_date)}
end
end

最佳答案

我宁愿使用查询来测试它并检查结果,但如果你真的必须这样做,对于 Rails 3,一个可能的解决方案是这样的:

CatMembership.scoped.to_sql.should == CatMembership.order(:created_at).to_sql

在 Rails 2 上:

CatMembership.default_scoping.should == [{:create=>{}, :find=>{:order=>"created_at"}}]

但我不会说这些解决方案是理想的,因为它们展示了很多关于实现的知识(并且您可以看到实现因不同的 Rails 版本而异)。

创建示例数据、运行常规的all 查询并检查结果是否正确排序可能更简单,更接近于实际单元测试,甚至在升级 Rails 版本时也能正常工作。

在这种情况下可能是:

before do
@memberships = []

@memberships << CatMembership.create!
@memberships << CatMembership.create!
@memberships << CatMembership.create!

[ 1.hour.ago, 5.minutes.ago, 1.minute.ago ].each_with_index do |time, index|
membership = @memberships[index]
membership.created_at = time
membership.save
end

end

it 'should be correctly ordered' do
@sorted_memberships = CatMembership.all
@memberships.first.should == @sorted_memberships.last
@memberships.second.should == @sorted_memberships.second
@memberships.third.should == @sorted_memberships.first
end

它要冗长得多,但即使您在轨道上前进,它也会起作用。

现在我才注意到是谁问了这个问题:D

关于ruby - 我怎样才能对我的默认范围进行 rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853744/

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