私はテストを開始していますが、let
を使用するときは正確にはわかりません。rspecモデル仕様vs工場
遅延ロードのモデルテストではlet
を使用する必要がありますか、またはすべてのテストでデータが少し異なるため、そのまま使用できますか?いくつかの例で見たように、コントローラーテストの方が重要です。具体的には、:task
はそれぞれのアクションテストで同じです。
モデルの仕様
require 'rails_helper'
RSpec.describe Task, type: :model do
describe "model validations" do
it "has a valid factory" do
expect(build(:task)).to be_valid
end
it "is invalid without executor" do
expect(build(:task, executor_id: nil)).not_to be_valid
end
it "is invalid without assigner" do
expect(build(:task, assigner_id: nil)).not_to be_valid
end
it "is invalid without content" do
expect(build(:task, content: nil)).not_to be_valid
end
it "is invalid without deadline" do
expect(build(:task, deadline: nil)).not_to be_valid
end
it "is invalid with deadline in the past" do
expect(build(:task, deadline: Faker::Time.between(DateTime.now - 1, DateTime.now - 2))).not_to be_valid
end
end
end
工場
FactoryGirl.define do
factory :task do
content { Faker::Lorem.sentence }
deadline { Faker::Time.between(DateTime.now + 2, DateTime.now + 3) }
association :executor, factory: :user
association :assigner, factory: :user
end
end
Jim、コピーすることもできますこのコードは工場との違いを正確に見るために? –
@SzilardMagyarの工場は、はるかに異なる目標を達成しています。ファクトリの仕事は、ドメインオブジェクトをプロビジョニングして(おそらくそれらをデータベースに保持する)ことです。上記のテストのこのスタンザは、私のアプリケーションのいずれかで意味のあるすべてのモデルのために書いたものと本質的に同じです。私の 'let'ステートメントは、しばしば工場出力自体、または工場で作成されたオブジェクトに対して呼び出されるドメインメソッドのいずれかを含んでいます。希望が助けてくれる! –
ジム、例えば 'let(:task){create(:not_due_task)}' 'や' let(:task){'' create(:overdue_task)} 'の '実際にあなたの例を得ることはできません。 –