私はレールの初心者で、「Rspec」、「shoulda」、および「factory girl」の宝石を使用して既存のレールアプリのテストを作成する必要があります。validates_presence_of: something のような非特定のテストを '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' のような値を割り当てようとすると