closure_treeはRailsのfixturesには未対応の模様 606 views Post @wakairo 2023/11/08 09:36 closure_treeは、現在のところfixturesと組み合わせて利用されることが想定されていないようです。 と言うのも、closure_tree gemを利用したRails 7のappのtestにおいて、fixturesを用いているのですが、いくつか困った現象に遭遇しているためです。 開発で困っている現象 具体的には、以下のような現象に遭遇しています。 closure_treeを利用しているモデルのfixturesに対してclosure_treeのメソッドを呼ぶとおかしな結果が返ってくる 具体例: foos(:one).self_and_descendant_ids #=> [] (少なくともselfのIDが含まれるはずなので、空の配列はおかしい) バリデーションで弾かれることを期待したテストを書いたところSystemStackErrorが発生する 現在の対応策 これらの現象は、test中でcreateメソッド等を使用して作成したオブジェクトでは発生しません。 そこで前述の現象に対応するため、closure_treeを利用しているモデルでは、create等のメソッドでオブジェクトを作成し、testに用いています。 なお、小手先のテクニックとして、fixturesで記述したテスト用初期設定を、createで作ったオブジェクトに移し替える処理を書くという方法があります。こうすることで、テスト用初期設定はfixturesに書きつつも、困った現象は回避することが出来ます。
@wakairo 2023/11/08 09:36 closure_treeは、現在のところfixturesと組み合わせて利用されることが想定されていないようです。 と言うのも、closure_tree gemを利用したRails 7のappのtestにおいて、fixturesを用いているのですが、いくつか困った現象に遭遇しているためです。 開発で困っている現象 具体的には、以下のような現象に遭遇しています。 closure_treeを利用しているモデルのfixturesに対してclosure_treeのメソッドを呼ぶとおかしな結果が返ってくる 具体例: foos(:one).self_and_descendant_ids #=> [] (少なくともselfのIDが含まれるはずなので、空の配列はおかしい) バリデーションで弾かれることを期待したテストを書いたところSystemStackErrorが発生する 現在の対応策 これらの現象は、test中でcreateメソッド等を使用して作成したオブジェクトでは発生しません。 そこで前述の現象に対応するため、closure_treeを利用しているモデルでは、create等のメソッドでオブジェクトを作成し、testに用いています。 なお、小手先のテクニックとして、fixturesで記述したテスト用初期設定を、createで作ったオブジェクトに移し替える処理を書くという方法があります。こうすることで、テスト用初期設定はfixturesに書きつつも、困った現象は回避することが出来ます。
closure_treeは、現在のところfixturesと組み合わせて利用されることが想定されていないようです。
と言うのも、closure_tree gemを利用したRails 7のappのtestにおいて、fixturesを用いているのですが、いくつか困った現象に遭遇しているためです。
開発で困っている現象
具体的には、以下のような現象に遭遇しています。
foos(:one).self_and_descendant_ids #=> []
(少なくともselfのIDが含まれるはずなので、空の配列はおかしい)現在の対応策
これらの現象は、test中でcreateメソッド等を使用して作成したオブジェクトでは発生しません。
そこで前述の現象に対応するため、closure_treeを利用しているモデルでは、create等のメソッドでオブジェクトを作成し、testに用いています。
なお、小手先のテクニックとして、fixturesで記述したテスト用初期設定を、createで作ったオブジェクトに移し替える処理を書くという方法があります。こうすることで、テスト用初期設定はfixturesに書きつつも、困った現象は回避することが出来ます。