1

我正在使用继承 ActiveRecord::Base 的类创建一个 ruby​​ 项目。如何在不使用数据库的情况下为以下代码示例编写 rspec 测试和简单覆盖。

class Person < ActiveRecord::Base
    validates_length_of :name, within: 10..40
end
person = Person.create(:name => "aungaung")
person.save
4

2 回答 2

1

如果你不想碰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。

于 2013-08-27T03:52:57.800 回答
0

这是在 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
于 2013-08-27T02:10:45.260 回答