Rails本体の、testを実行する(4)
一昨日 (http://d.hatena.ne.jp/kouji0625/20130613/p1) の続きです。
一昨日の時点で、あとは activerecord の失敗するテストをどうにかすればOKという状態でした。さぁ、今日もはりきっていってみよ〜♪
activerecord
テストに失敗する
activerecord のテストは同じ内容のテストを MySQL, MySQL2, SQLite, PostgreSQL に対して行うため、エラーの数は多いですが、修正箇所は(エラーの数よりも)少ないです。
まずは「Using native MySQL」において、失敗するテストをなんとかします。
1) Failure: test_reordered_scope_overrides_default_scope_order(DefaultScopingTest) [./test/cases/relation_scoping_test.rb:421:in `test_reordered_scope_overrides_default_scope_order' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run' /Users/kouji/work/rails/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']: <false> is not true.
これは「scope :reordered_by_name, reorder('name')」を「scope :reordered_by_name, except(:order).order(:name)」に変えたことが原因だと分かりました。
reorderは3.0.7からdeprecatedではなくなっているので、reorderに戻すことにした。(reverted 6f3a4c6b5e38acec11887b1adbc6e0bbf75dce1b)
2) Failure: test_should_automatically_build_new_associated_models_for_each_entry_in_a_hash_where_the_id_is_missing(TestNestedAttributesOnAHasAndBelongsToManyAssociation) [./test/cases/nested_attributes_test.rb:608:in `test_should_automatically_build_new_associated_models_for_each_entry_in_a_hash_where_the_id_is_missing' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run' /Users/kouji/work/rails/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']: <"Grace OMalley"> expected but was <"Privateers Greed">. 3) Failure: test_should_automatically_build_new_associated_models_for_each_entry_in_a_hash_where_the_id_is_missing(TestNestedAttributesOnAHasManyAssociation) [./test/cases/nested_attributes_test.rb:608:in `test_should_automatically_build_new_associated_models_for_each_entry_in_a_hash_where_the_id_is_missing' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run' /Users/kouji/work/rails/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']: <"Grace OMalley"> expected but was <"Privateers Greed">.
この2つはv3.0.20の修正を手作業で取り込むことで対応。(commit: cf2769c3284d04180646dc296e5823d8f53263ea)
修正した結果、「Using native MySQL2」「Using native SQLite3」でも全てのテストが成功するようになりました。(やったね!!)
最後は「Using native PostgreSQL」。これは強敵です。
1) Failure: test_should_be_able_to_encode_relation(DatabaseConnectedJsonEncodingTest) [./test/cases/json_serialization_test.rb:216:in `test_should_be_able_to_encode_relation' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run' /Users/kouji/work/rails/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']: <"[{\"author\":{\"name\":\"David\"}},{\"author\":{\"name\":\"Mary\"}}]"> expected but was <"[{\"author\":{\"name\":\"Mary\"}},{\"author\":{\"name\":\"David\"}}]">.
v3.0.20をバックポートして対応。
$ git diff v3.0.3..v3.0.20 test/cases/json_serialization_test.rb | patch -p2
2) Failure: test_delete_all_association_with_primary_key_deletes_correct_records(HasManyAssociationsTest) [./test/cases/associations/has_many_associations_test.rb:739:in `test_delete_all_association_with_primary_key_deletes_correct_records' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run' /Users/kouji/work/rails/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']: <1> expected but was <2>. 3) Failure: test_depends_and_nullify(HasManyAssociationsTest) [./test/cases/associations/has_many_associations_test.rb:903:in `test_depends_and_nullify' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run' /Users/kouji/work/rails/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks' /Users/kouji/work/rails/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']: <#<Account id: 3, firm_id: 6, firm_name: nil, credit_limit: 50>> expected but was <#<Account id: 5, firm_id: 6, firm_name: nil, credit_limit: 55>>.
v3.0.20との差分を見ながら手作業で修正。(commit: 90f234e)
その後
全て対応できたと思ったら、失敗するテストがでてきた。
ちょっと雑になってしまうけど(笑)、以下のコミットで修正。
- 9ecad8ac3ade2c41fdd5115fdc4990ab5104697e
- 479b5017f76bb8ddbe23d6e243c6ad14d6321666
- debb4fc034f5414587d094eb9af615b07bee338c
- ff25db0c87aaa4fbe6ef609cf7e2e70b71ce779c
- 83ea5959bad138564c7fe0a45ee89805f8861ee2
- 810dd5788f0ef9be84f24d43452c5832e05393f0
- 28c1f6731369180c73bf2ca837b1c21efae78047
これでテストが通るクリーンな Rails 3.0.3 が用意出来ました。
興味がある方は takaokouji/rails・GitHub: https://github.com/takaokouji/rails/tree/takaokouji/v3.0.3 からどうぞ。
残りの作業は TravisCI を設定して、コミットのたびに test を実行できるようにすることです。
(つづく...)
--- 参考URL
--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。
- かくってる?: http://cocktailq.herokuapp.com/