ラベル factorygirl の投稿を表示しています。 すべての投稿を表示
ラベル factorygirl の投稿を表示しています。 すべての投稿を表示

2017年4月18日火曜日

rspecでtimecopで日時を固定したのにFactoryGirlのデータが固定されない

rspecのテストで特定の日時でのテストをしたくて、
timecopで日時を固定したのにFactoryGirlのデータが固定された日付ではなく、
現在日時のデータになってしまったので、調べました。

環境は以下です
timecop 0.8.0
factory_girl 4.5.0
rspec 3.5.0

テストデータとテストはこんな感じです。
FactoryGirl.define do
  factory :aaa do
    target_date Date.today.tomorrow
  end
end

Timecop.freeze(Date.parse('2017-04-04'))
aaa = FactoryGirl.create(:aaa)
expect(aaa.target_date == Date.today.tomorrow).to eq(true)
実行すると、trueにならずにテスト失敗となります。。

FactoryGirlの書き方を以下のようにすると、ちゃんと固定された日時を元に日付が入りました
target_date { Date.today.tomorrow }

参考URL
http://stackoverflow.com/questions/33110516/timecop-does-not-work-with-datetime-attributes-defined-in-factorygirl

2016年6月6日月曜日

rspecでFactoryGirlでCarrierWaveのデータを作成する

CarrierWaveのイメージを入れたFactoryGirlのデータを作りたかったので調べました。

テスト用の画像データを以下に置いた状態で、
spec/support/files/test.jpg
以下の形式で記述するとよさげです。

test_image { Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec', 'support', 'files', 'test.jpg'))



参考URL
http://kzy52.com/entry/2014/01/03/094308

2016年2月6日土曜日

FactoryGirlでシリアライズしたデータを登録する

DBにHashをシリアライズしたものを文字列として保存していて、
そのテストデータをFactoryGirlで作りたくて調べました。

migration
class User < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.text :info
    end
  end
end

model
class User < ActiveRecord::Base
  serialize :info
end

最初に以下のようなStringで入れてみたりしましたがダメでした。
"{ memo1: 'memo', memo2: 'memo2', count: 2 }"

調べたところ、()や{}で囲えばよいようです
factory
require 'faker'
FactoryGirl.define do
  factory :user do
    id 1
    name 'Taro'
    info ({ memo1: 'memo', memo2: 'memo2', count: 2 })
  end
end

参考URL
http://www.rubycoloredglasses.com/2012/06/add-a-serialized-hash-attribute-to-a-factory_girl-definition/