Nasıl rspec içinde Raylar 3.1 motor kontrol testi yazacağım?
Ad Mesaj Rails 3.1 motoru yazdım. Dolayısıyla, benim denetleyicileri app/models/, modellerimi app/ kontrolörleri/Mesajlar/Mesaj, vb bulunur. Modeller gayet iyi test edebilirim. Bir model için spec... gibi görünüyor
module Posts
describe Post do
describe 'Associations' do
it ...
end
... ve her şey gayet iyi çalışıyor.
Ancak, denetleyicileri için gözlük çalışmıyor. Raylar motor /posts monte edilmiştir, henüz denetleyicisi Mesaj::PostController. Böylece, test denetleyicisi yol için Mesajlar/Mesaj olacak.
describe "GET index" do
it "assigns all posts as @posts" do
Posts::Post.stub(:all) { [mock_post] }
get :index
assigns(:posts).should eq([mock_post])
end
end
veren...
1) Posts::PostsController GET index assigns all posts as @posts
Failure/Error: get :index
ActionController::RoutingError:
No route matches {:controller=>"posts/posts"}
# ./spec/controllers/posts/posts_controller_spec.rb:16
Test uygulama yolları, dosya hileler her türlü denedim... :ad, boşuna, vb.
Bu nasıl iş yapabilirim? Motor /mesaj at denetleyicisi koyar, henüz namespacing /mesaj at denetleyicisi koyduğundan değil, test amaçlı/mesajlar kazandı gibi görünüyor.
CEVAP
enginex tarafından oluşturulan gibi kukla bir rails uygulaması ile motoru test etmek, farz ediyorum.
Motoru kukla app monte edilmelidir:
spec/dummy/config/routes.rb:
Dummy::Application.routes.draw do
mount Posts::Engine => '/posts-prefix'
end
İkinci varsayımım, motoru izole olmasıdır:
lib/posts.rb:
module Posts
class Engine < Rails::Engine
isolate_namespace Posts
end
end
Eğer bu iki varsayım gerçekten gerekli olup olmadığını bilmiyorum, ama bu benim kendi motoru yapılandırılmıştır.
Çözüm oldukça basit, bu yerine
get :show, :id => 1
bu kullanın
get :show, {:id => 1, :use_route => :posts}
:posts sembol motoru adını ve monte edildiği yolu olmalı.
Bu çalışır çünkü get metodu parametreleri geçti düz ActionDispatch::Routing::RouteSet::Generator#initialize (tanımlı here), hangi sırayla kullanır @named_route almak için doğru rota Rack::Mount::RouteSet#generate (here here).
Raylar iç içine dalan eğlenceli, ama oldukça zaman alıcı, bu her gün yaptığım bir şey değil ;-) .
HTH

Nasıl belirli bir tablo için MySQL mot...
Nasıl bir veritabanı SQL Server içinde...
Nasıl bir Kısıtlama Sql server içinde ...
Nasıl eğer bir element, bir dizi içind...
Nasıl eğer belirli bir dizin, bir tabl...