Railsを学んでいる間に、Domains
コントローラをCustomers
コントローラの下にネストしたアプリケーションを作成しました。私はRails 2.3.4を使用しています。それは学習の経験です。Rails:ネストされたリソースのテストを変更するにはどうすればよいですか?
customer_domains GET /customers/:customer_id/domains(.:format) {:controller=>"domains", :action=>"index"}
POST /customers/:customer_id/domains(.:format) {:controller=>"domains", :action=>"create"}
new_customer_domain GET /customers/:customer_id/domains/new(.:format) {:controller=>"domains", :action=>"new"}
edit_customer_domain GET /customers/:customer_id/domains/:id/edit(.:format) {:controller=>"domains", :action=>"edit"}
customer_domain GET /customers/:customer_id/domains/:id(.:format) {:controller=>"domains", :action=>"show"}
PUT /customers/:customer_id/domains/:id(.:format) {:controller=>"domains", :action=>"update"}
DELETE /customers/:customer_id/domains/:id(.:format) {:controller=>"domains", :action=>"destroy"}
customers GET /customers(.:format) {:controller=>"customers", :action=>"index"}
POST /customers(.:format) {:controller=>"customers", :action=>"create"}
new_customer GET /customers/new(.:format) {:controller=>"customers", :action=>"new"}
edit_customer GET /customers/:id/edit(.:format) {:controller=>"customers", :action=>"edit"}
customer GET /customers/:id(.:format) {:controller=>"customers", :action=>"show"}
PUT /customers/:id(.:format) {:controller=>"customers", :action=>"update"}
DELETE /customers/:id(.:format) {:controller=>"customers", :action=>"destroy"}
root / {:controller=>"customers", :action=>"index"}
ただし、ルーティングエラーのためにドメインコントローラのすべてのテストに失敗しています。
たとえば、DomainsControllerTest
クラスの他のすべてのテストと同様に、次のテスト(Railsのリソースジェネレータで生成)は失敗します。
class DomainsControllerTest < ActionController::TestCase
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:domains)
end
end
それはエラーで失敗します。
No route matches {:action => "index", :controller => "domains"}
デフォルトルートは、もはや存在して以来、これは理にかなっていないとドメインコントローラが設定する@customer
が必要です。午後、必要な変更を探していましたが、ほとんどすべてのサイトで通常のRailsテストではなくRspecテストについて話しています。
domains_controller_test.rb
を変更してネストされたリソースを理解するにはどうすればよいですか?
それはうまくいくようです、リシャブ。それぞれ別のテストにIDを渡す代わりに、これをDRYする方法はありますか? –
Martijn、それはあなたがしなければならないことです。ルーティングでは、顧客が作業することを知っていなければなりません。私はあなたがハッシュのcustomer_id部分をオートフィルする "get"呼び出しを置き換えるテストヘルパを書くことができると思いますが、DomainsControllerに対する多くのテストを書かない限り、それは悪い考えです。 –
これをDRYすることが悪い考えである理由を指摘したいのですが、読み込みとデバッグが困難な場合があります。 DRYコードは大丈夫ですが、読みやすさを犠牲にしているわけではありません。テストでは、あなたは何が起こっているのかを確かに見ることができるようにしたいと思っています。可読性を犠牲にすることなく、またはテストに脆弱性を追加することなくDRYを行うことができれば、それを実行してください。 – WattsInABox