Я новичок в рельсах, и мне нужно написать тесты для существующих приложений рельсов с драгоценными камнями «Rspec», «shoulda» и «factory girl». Я могу протестировать неспецифические тесты, такие как 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'