Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@jin-jar-ale

Rails EngineのRootからRSpecを実行すると、Webpackerのエラーが出たので対応する

More than 1 year has passed since last update.

状況

アプリケーションが複数のUIで構成されているので、以下のような対応をしていた。分離することで、Webpackのバージョンから何やら分けることができる。

Webpackerのインスタンスをクラスメソッドで定義して、別のところから呼び出せるようにする。

module Convenience
  ROOT_PATH = Pathname.new(File.join(__dir__, ".."))

  class << self
    def webpacker
      @webpacker ||= ::Webpacker::Instance.new(
        root_path: ROOT_PATH,
        config_path: ROOT_PATH.join("config/webpacker.yml")
      )
    end
  end
end

ヘルパーに以下を記載し、先程のインスタンスを呼ぶようにすれば、stylesheet_pack_tagやjavascript_pack_tagが呼びだせる。

module Convenience
  module ApplicationHelper
    include ::Webpacker::Helper

    def current_webpacker_instance
      Convenience.webpacker
    end
  end
end

ちなみにこのメソッドは、カレントWebpackerインスタンスを返すので、先程のConvenienceの例だと、ConvenienceのWebpackerインスタンスを返すようにOverrideしてあるようだ。

module Webpacker::Helper
  # Returns current Webpacker instance.
  # Could be overridden to use multiple Webpacker
  # configurations within the same app (e.g. with engines)
  def current_webpacker_instance
    Webpacker.instance
  end

RSpecでエラー

ただ、EngineRootからrspecを実行するとエラーになるので、test環境だけ分岐する必要がある。もしかしたらもっといい方法があるのかもしれないが、一旦EngineRootから直でrspecを呼び出すという要件に合わせるためにコードを追記した。

module Convenience
  module ApplicationHelper
    include ::Webpacker::Helper

    unless Rails.env.test?
      def current_webpacker_instance
        Convenience.webpacker
      end
    end
  end
end

なお、コードは https://github.com/rails/webpacker/blob/master/docs/engines.md#using-in-rails-engines こちらからコピペしたものだと予想できる。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
jin-jar-ale
個人アカウントのため、所属する組織とは関係ありません
brainport
ブレインポートは、システム受託開発、中小企業向けIT支援サービスや自社サービス、ソフトウェアなどを展開するスタートアップ企業です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?