げんきちの秘密基地

エンジニアリングが世の中の思いを実現してきた歴史に気づき、29歳未経験からWEBエンジニアとして転生!【Danger】綺麗事を割と本気で言ってきます【GitHub】https://github.com/0840kg【Twitter】https://twitter.com/0840kg

分からん!FactoryBotのbuild、attributes_for、createの違い

ぞす!げんきちです!\\\\٩( 'ω' )و ////

 

「いや、誰だよ」って方は、下記リンクを見てやってください。

  1. はじめまして!げんきちです! - げんきちの秘密基地

  2. 僕がエンジニアになりたい理由 - げんきちの秘密基地

目次〜

f:id:Genkichi:20190228214846j:plain

 

テストをしていて詰まりました。

 

定義元

FactoryBot.define do
  factory :message do
    content {Faker::Lorem.sentence}
    image {File.open("#{Rails.root}/public/images/no_image.jpg")}
    user
    group
  end
end

 

このファクトリーボットをメソッドで呼び出しました。

 

buildメソッド

[5] pry(#<Class>)> FactoryBot.build(:message)
=> #<Message:0x007fe08e3acd40 id: nil, content: "じぶん 弥生 ちらかす ぼうず。", image: nil, group_id: nil, user_id: nil, created_at: nil, updated_at: nil>

 

attributes_forメソッド

[6] pry(#<Class>)> FactoryBot.attributes_for(:message)
=> {:content=>"日没 太る さいぼう, さいほう もうす。", :image=>#<File:/Users/kitamuragenki/projects/chat-space/public/images/no_image.jpg>}

 

createメソッド

[7] pry(#<Class>)> FactoryBot.create(:message)
=> #<Message:0x007fe092050990
 id: 3,
 content: "白菊 みなと あっとうする げいひんかん。",
 image: "no_image.jpg",
 group_id: 30,
 user_id: 24,
 created_at: Thu, 28 Feb 2019 10:50:05 UTC +00:00,
 updated_at: Thu, 28 Feb 2019 10:50:05 UTC +00:00>

同じ定義元から呼び出しているのに、値が入ったり、抜けたりする...?

メソッドによって値の入り方が変わるまで当然。

気になるのは、imageの値。

 

attributes_forは、擬似的にcreateアクションをリクエストしたい時とか。

だから、ちゃんと.jpgのあるディレクトリが指定できてるからおっけー。

 

createメソッドは、DBに保存された値がそのまま入ってるからおっけー。

 

buildメソッドは...

 

image: nil ってなぜだぁああああああ!!?

 

試したこと

carrierwaveが影響してるのかな...

factoryBot carrierwaveで調べてみました。

github.com

 

imageの記述を修正しました。

include ActionDispatch::TestProcess

FactoryBot.define do
  factory :message do
    content {Faker::Lorem.sentence}
    image { Rack::Test::UploadedFile.new(Rails.root.join('public/images/no
_image.jpg
'), 'image/jpg') } user group end

 

結果は変わりませんでした。

[2] pry(#<RSpec::ExampleGroups::Message::Create::CanSave>)> FactoryBot.build(:message)
=> #<Message:0x007fea13ab3d08 id: nil, content: "白菊 かい たいさ 胃。", image: nil, group_id: nil, user_id: nil, created_at: nil, updated_at: nil>

 

今回は、createアクションのテストです。

なので、attributes_forを使えば目的は達成できるため我慢します。

 

しかし、すっごく気になる...

ご存知の方いたら、教えていただけたら嬉しいです!🙇‍♂️

問題提起で終わってすいません。

時間がある時に、追記します。

 

<一日一新>

渋谷のVRカフェ。ぅおおおおおお!ってなりました。

 

<学習進捗>

学習開始からの期間 :82日
今日までの合計時間:813h
今日までに到達すべき目標時間:748h
目標との解離:65h
10,000時間」まで、

 

残り・・・9,187時間!」

 

以上です。

読んでくれた方々、ありがとうございました!((_ _ (´ω` )ペコ。

genkichi.hateblo.jp

genkichi.hateblo.jp

 

f:id:www08056561815:20190224095507g:plain

twitter.com