我是 Rails 的新手,我必须使用“Rspec”、“should”和“factory girl” gem 为现有的 rails 应用程序编写测试。我可以测试非特定测试,例如 validates_presence_of: 带有“sholda”匹配器的东西。但我想测试模型中的方法。我可以想象我需要做什么,但我不能作曲。
这是我正在谈论的一个例子:
.
.
.
context 'is editable if project is not started' do
setup do
@brief=Factory(:brief)
@started_project=Factory(:project_started, :brief => @brief)
@brief_have_no_project=Factory(:brief)
end
specify "with editable brief" do
@brief.brand_info = 'bla bla bla' #change brand info, this is impossible
#i can't compose this section :S
end
specify "with non-editable brief" do
end
end
.
.
.
我想测试在这段代码中是简短的可编辑的。我该如何测试它?
这是简短的模型代码:
class Brief < ActiveRecord::Base
belongs_to :project
validate :can_only_be_edited_if_project_is_not_started
.
.
.
def can_only_be_edited_if_project_is_not_started
errors.add(:project_id, 'can_only_be_edited_if_project_is_not_started') if
!project.nil? && !project.brief_can_be_edited?
end
.
.
.
end
如果我能找到一个起点,我会很高兴。感谢帮助。:)
失败:
1) 如果项目不是以可编辑的简报开始的,则简报是可编辑的。
Failure/Error: @brief.brand_info = 'bla bla bla'
NoMethodError:
undefined method `brand_info=' for nil:NilClass
# ./spec/models/brief_spec.rb:34:in `block (3 levels) in <top (required)>'
当尝试像这样分配价值时@brief.brand_info = 'bla bla bla'