現在Rspec を用いてテストをしようとしています。ですが、そのコードの意味が分からず困っています。教えてください。
ファクトリーガールでつくったテスト用データ
ruby
1#spec/factories/phones.rb 2#Phone のファクトリーガール 3 4FactoryGirl.define do 5 factory :phone do 6 association :contact 7 phone "123-456-789" 8 9 factory :home_phone do 10 phone_type "home" 11 end 12 factory :work_phone do 13 phone_type "work" 14 end 15 end 16end
ruby
1#spec/factories/contacts.rb 2#Contact のファクトリーガール 3 4FactoryGirl.define do 5 factory :contact do 6 firstname "John" 7 lastname "Doe" 8 sequence(:email) {|n| "Johndoe#{n}@example.com"} 9 end 10end
コントローラーのテスト
ruby
1# spec/controllers/contacts_controller_spec.rb 2# (略) 3 4 describe "POST #create" do 5 before :each do 6 @phones = [ 7 attributes_for(:phone), 8 attributes_for(:phone), 9 attributes_for(:phone) 10 ] 11 end 12 13# 有効な属性の場合 14 context "with valid attributes" do 15 # データベースに新しい連絡先を保存すること 16 it "saves the new contact in the database" do 17 expect{ 18 post :create, contact: attributes_for(:contact, 19 phones_attributes: @phones) 20 }.to change(Contact, :count).by(1) 21 end 22 23 # contacts#show にリダイレクトすること 24 it "redirects to contacts#show" do 25 post :create, contact: attributes_for(:contact, 26 phones_attributes: @phones) 27 expect(response).to redirect_to contact_path(assigns[:contact]) 28 end 29 end 30end
モデルのテスト
ruby
1# spec/models/phone_spec.rb 2#(略) 3 it "allows two contentx to share phone number" do 4 create(:home_phone, phone: "123-456-789") 5 expect(build(:home_phone, phone: "123-456-789")).to be_valid 6 end
こんな感じでつくったのですが、書かれている内容がわからないので教えてください。
1
factorygirl でメールアドレスを定義するとき
sequence(:email) {|n| "Johndoe#{n}@example.com"}
こうしたなったのですが、モデルのテストで 3回 create(:contact) 場合、
Johndoe1@example.com
Johndoe2@example.com
Johndoe3@example.com
となるということですか?
2
spec/controllers/contacts_controller_spec.rb の
ruby
1 post :create, contact: attributes_for(:contact, 2 phones_attributes: @phones)
の部分は何をやっているのでしょうか? contact: の部分や、 phones_attributes で何をやっているのかさっぱりわかりません。
3
spec/models/phone_spec.rb
にある
expect(build(:home_phone, phone: "123-456-789")).to be_valid
これのbuild 内 :home_phone としているのですが、電話番号はたしか FactoryGirl では電話番号を作成したはずだから
FactoryGirl.define do factory :phone do association :contact phone "123-456-789" factory :home_phone do phone_type "home" end factory :home_phone do phone_type "home" end ・ ・ ・
でやっているので、build(:home_phone) としたら電話番号も同時に追加されていないんですか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。