我正在使用继承 ActiveRecord::Base 的类创建一个 ruby 项目。如何在不使用数据库的情况下为以下代码示例编写 rspec 测试和简单覆盖。
class Person < ActiveRecord::Base
validates_length_of :name, within: 10..40
end
person = Person.create(:name => "aungaung")
person.save
如果你不想碰db,FactoryGirl.build_stubbed
是你的朋友。
> person = FactoryGirl.build_stubbed :person
> person.save!
> #=> person obj
> Person.all
> #=> [] # Not saved in db
所以,要测试验证
it "validates name at length" do
person = FactoryGirl.build_stubbed :person, name: "aungaung"
expect{person.save!}.to raise_error(ActiveRecord::RecordInvalid)
end
注意 build_stubbed 擅长模型的单元测试。对于与 UI 相关的任何内容,您都不能使用此方法,实际上需要保存到 db。
这是在 ActiveRecord 模型上测试验证的简短示例。您当然可以更深入,并且有很多方法可以使测试更优雅,但这对于第一次测试就足够了。
describe Person do
describe "#name" do
specify { Person.new(:name => "Short").should_not be_valid }
specify { Person.new(:name => "Long" * 12).should_not be_valid }
specify { Person.new(:name => "Just Right").should be_valid }
end
end