3

編集 1

rspec-railsの問題を作成し、リポジトリを作成して、人々が自分でテストできるようにしました。

元の投稿

このstackoverflowの回答に従ってプラグインを構築し、次のようにエンジンにルートを追加しました:

# /config/routes.rb

Myplugin::Engine.routes.draw do
  root to: 'pages#index'
end

私の唯一のrspecテストはこれです:

# /spec/controllers/pages_controller_spec.rb

require "spec_helper"

describe Myplugin::PagesController do

  describe "GET /admin" do
    it "routes to pages#index" do
      expect(get: "/admin").to route_to(controller: "pages", action: "index")
    end
  end
end

そして、ダミーアプリには次のルートがあります:

# /spec/dummy/config/routes.rb

Rails.application.routes.draw do
  mount Myplugin::Engine => "/admin"
end

rspecプラグインのルートで実行すると、次のエラーが発生します。

Failures:

  1) Myplugin::PagesController GET /admin routes to pages#index
     Failure/Error: expect(get: "/admin").to route_to(controller: "pages", action: "index")
       No route matches "/admin"
     # ./spec/controllers/pages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'

このstackoverflow answerを試しましたが、出力は変わりません。

何か案は?

rspec 2.13.0 と rails 3.2.13 を使用しています。

4

1 に答える 1

0

ダミー アプリはメイン アプリケーションでは使用しないでください。プラグインを分離してテストするために使用する必要があります。たとえば、プラグインに名前が付けられMypluginていて、メインアプリへの参照なしでプラグインを分離してテストしたい場合は、ダミーアプリを作成して、プラグインが保存されている場所vendors/plugins/my_plugin/spec/dummyでテストできます。vendors/plugins/admin/specプラグインは単独では実行できないことが多いため、ダミー アプリを使用します。たとえば、プラグインの良い例であるデバイスは、機能するApplicationControllerためにユーザーモデル(およびその他のもの)を備えたメインアプリを必要とします。

プラグインをこのアプリケーションでのみ使用する場合、またはプラグインがメイン アプリで正しく動作することをテストするだけの場合は、通常通りにテストをspec作成し、ダミー アプリを作成しないでください。プラグインがメイン アプリに読み込まれるため、これは問題なく機能します。もちろん、メインルートファイルには次のものが必要です。

# config/routes.rb
Rails.application.routes.draw do
  mount Myplugin::Engine => "/admin"
end

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-06-19T08:30:02.813 に答える