未通过新对象有效性的Rspec测试



我完成了Michael Hartl的Ruby on Rails教程,所有测试都通过了。现在我要回去对网站进行更改以满足我自己的需求,这并不像"本节的测试没有通过"那样简单。我创建了一个新的"慈善"对象,它强烈基于Hartl的"Micropost"对象。唯一的区别是对象没有"内容",而是有一个:name:description:summary

这是失败测试的代码(特别是"it{should be_valid}"),位于/charity_spec.rb:中

require 'spec_helper'
describe Charity do
let(:user) { FactoryGirl.create(:user) }
before { @charity = user.charities.build(summary: "Lorem ipsum") }
subject { @charity }
it { should respond_to(:name) }
it { should respond_to(:user_id) }
it { should respond_to(:summary) }
it { should respond_to(:description) }
it { should respond_to(:user) }
its(:user) { should == user }
it { should be_valid }
...

测试一开始确实通过了,但一旦我将验证添加到charity.rb文件中,它们就会返回;

Failures:
1) Charity
Failure/Error: it { should be_valid }
expected valid? to return, true, got false
...

这是charity.rb:

class Charity < ActiveRecord::Base
attr_accessible :name, :description, :summary
belongs_to :user
validates :name, presence: true, length: { maximum: 40 }
validates :summary, presence: true
validates :description, presence: true
validates :user_id, presence: true
default_scope order: 'charities.created_at DESC'
end

我确信这是愚蠢的事情,但我对一切的理解都很薄弱,我不知道自己做错了什么,我的感觉是我的工厂出了问题,但我真的不知道。

这是我位于factories.rb:的慈善工厂

factory :charity do
name "Lorem ipsum"
summary "Lorem ipsum"
description "Lorem ipsum"
user
end

当我从charity.rb中删除:name:summary:description验证时,测试通过。为了更好地衡量,以下是我的user.rb:的开始

class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation 
has_secure_password
has_many :charities
has_many :microposts, dependent: :destroy

利用你的工厂建立一个合适的慈善机构:

before { @charity = user.charities.build(FactoryGirl.attributes_for(:charity)) }

它失败了,因为您验证了未设置为name的属性的存在

如果你需要更多关于FactoryGirl的背景,他们的文档真的很好。

最新更新