Tôi đang cố gắng để kiểm tra một bộ điều khiển bên trong một động cơ ứng dụng của tôi đang sử dụng. Các spec không phải là trong động cơ, nhưng trong ứng dụng riêng của mình (tôi đã cố gắng để kiểm tra trong động cơ nhưng cũng có vấn đề).Rails engine: rake tuyến hiển thị các tuyến đường của nó nhưng trên rspec thực hiện "Không có tuyến đường phù hợp" được ném
động cơ của tôi có routes.rb sau:
Revision::Engine.routes.draw do
resources :steps, only: [] do
collection { get :first }
end
end
Động cơ được gắn trên routes.rb ứng dụng thông thường:
mount Revision::Engine => "revision"
Khi tôi chạy rake routes
, tại dòng cuối cùng tôi nhận được :
Routes for Revision::Engine:
first_steps GET /steps/first(.:format) revision/steps#first
root / revision/steps#first
Trên bộ điều khiển của động cơ (lib/revision/app/controllers/revision/steps_controller.rb
), tôi có :
module Revision
class StepsController < ApplicationController
def first
end
end
end
On RSpec, tôi thử nghiệm bộ điều khiển này với:
require 'spec_helper'
describe Revision::StepsController do
it "should work" do
get :first
response.should be_success
end
end
Sau đó, khi tôi chạy spec này, tôi nhận được:
ActionController::RoutingError:
No route matches {:controller=>"revision/steps", :action=>"first"}
Để chắc chắn rằng con đường không thực sự tồn tại, tôi đã thêm thông số này vào thông số:
before do
puts @routes.set.to_a.map(&:defaults)
end
Và kết quả là:
[...]
{:action=>"show", :controller=>"devise/unlocks"}
{:action=>"revision"}
Chỉ có thông số :action
.
Điều gì có thể sai?
Đồng ý. Lưu ý rằng điều này đúng chỉ khi Engine có một không gian tên riêng biệt. –
Điều này đã giúp tôi về một vấn đề mà thậm chí không liên quan đến động cơ của Rails. Tôi đã cố gắng để truy cập một tuyến đường bộ sưu tập lồng nhau bên trong của một nguồn tài nguyên, và cách duy nhất tôi có thể làm cho nó nhận ra hành động với một tuyến đường hợp lệ là để vượt qua trong 'use_route:: name_of_route'. Cảm ơn! –