1

BundlerとThorを使用して、テンプレートの生成を行う小さなRubyGemを作成しようとしています。キュウリとアルバでテストを書いていますが、合格するのに苦労しています。

アプリで次のThorCLIクラスを定義しています。

require 'thor'
require 'sleipnir'
require 'sleipnir/generators/layout'
require 'sleipnir/generators/app'

module Sleipnir
  class CLI < Thor

    desc "app", "Generates an app directory and copies the appropriate files"
    def app(app_name)
      Sleipnir::Generators::App.start([app_name])
    end

    desc "layout", "Generates specific layout based on template type"
    def layout(template_type)
      Sleipnir::Generators::Layout.start([template_type])
    end
  end
end

これはapp.rbファイルです:

require 'thor/group'

module Sleipnir
  module Generators
    class App < Thor::Group
      include Thor::Actions

      argument :app_name, :type => :string
      class_option :template_type, :default => :erb, :required => true

      def self.source_root
        File.dirname(__FILE__)
      end

      def create_app_dir
        empty_directory(app_name)
      end

      def copy_app_scaffold
        directory("app", app_name)
      end
    end
  end
end

そしてlayout.rbファイル:

require 'thor/group'

module Sleipnir
  module Generators
    class Layout < Thor::Group
      include Thor::Actions

      class_option :template_type, :default => :erb, :required => true

      def self.source_root
        File.dirname(__FILE__) + "/template"
      end

      def copy_layout
        template_type = options[:template_type]
        template("layout_template.#{template_type}", "views/layout.#{template_type}")
      end
    end
  end
end

appこのメソッド用にキュウリのテストを作成しましたが、合格しました。ただし、layoutメソッドは失敗しています。テストは次のとおりです。

Feature: Generate
  In order to generate templates
  As a CLI
  I want to run the generator

  Scenario: Layout
    When I run `sleipnir app test_app`
    Then the following directories should exist:
      | test_app/views |
    When I run `sleipnir layout --template_type "erb"`
    Then the following files should exist:
      | test_app/views/layout.erb |

テストの最初の部分は問題なく合格します(つまり、ディレクトリが作成されます)が、ファイルが存在することを確認する部分は失敗します。ファイルの構造を確認しましたが、layout_template.erbファイルが存在するため、正しくテンプレート化されていない理由がわかりません。

4

1 に答える 1