毎日やったことを記録していく(2019/4/29 22日目)
今日やったこと
英語
TOEIC® L&R テスト 文法問題 でる1000問
- 回答数:5問
iKnow
- 新規:0個
- 復習:220個
スタディサプリENGLISH
- クイックワードクイズ:1サブセクション
開発
danime-nico-tools
fixtures
の更新rake
タスク関連以外のテストを追加Form
(完了)Model
(完了)Hash
(未着手)
知ったこと
FactoryBotのsequence
FactoryBot
ではsequence
を使うと簡単に連番を付与したデータが作成できる。
ただし、安易に使うとテストが思わぬところで失敗する場合がある。
#### Sampleクラス class Sample def test "This test is #{name}" end def test2 "This test is #{name}" end end #### #### Sampleクラスのfactory FactoryBot.define do sequence :name do |n| "sample#{n}" end factory :sample do name end end #### RSpec.describe Sample do describe '#test' do let(:sample) { create(:sample) } it '名前を返す' do expect(sample.test).to eq 'This sample is sample1' # => テストがパスする end end describe '#test2' do let(:sample) { create(:sample) } it '名前を返す' do expect(sample.test2).to eq 'This sample is sample1' # => テストが失敗する end end end
上記のテストコードは#test2
のテストが失敗する。
当初、describe
でスコープが閉じていると考え、#test2
のテスト時点でsequence
がリセットされてまた1
から開始されると思っていたが実はそうではない。
上記のコードだと#test2
時点のSample
のname
はsample1
ではなくsample2
になる。
いちいち今のsequence
によって付与されている番号を予測するのは面倒くさいし、変更に弱くなるので、値が等しいかのテストで使うような属性にはsequence
は使わない方が良さそう。
感想等
今日はovto触れなかった
結局テストだけで時間取られて今日はovto
触る時間がなかった。
明日こそは今日やろうとしてたことやりたい。