1

我有一个像这样的个人资料模型;

class Profile < ActiveRecord::Base
  attr_accessible :first_name, :last_name
  belongs_to :user
  validates :user, presence: true
  validates :first_name, presence: true, on: :update
  validates :last_name, presence: true, on: :update
end

我想编写一些 rspec 测试来测试 first_name 和 last_name 的验证,但我看不到如何profile.should_not be_valid在模型测试中仅在更新时运行。就像是;

it "should be invalid without a first name on update" do
  profile = FactoryGirl.build :profile
  profile.first_name = nil
  profile_should_not be_valid
end

不区分更新或创建操作,我在 rspec 文档中看不到任何关于此的内容。当然,测试是一件相当普遍的事情。

4

1 回答 1

3

be_valid在 rspec 中只是调用valid?模型。

profile = FactoryGirl.build :profile

这将为 构建一个新模型实例Profile,但不会将其提交到数据库。您将使用它profile来进行创建测试。设置:first_namenil应该和调用profile.should be_valid应该通过。

profile = FactoryGirl.create :profile

这将构建模型实例并将其插入Profile数据库。您将使用它profile来进行更新测试。设置:first_namenilshould 和调用profile.should be_valid应该失败

于 2012-07-08T23:50:30.617 回答