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
ファイルが存在するため、正しくテンプレート化されていない理由がわかりません。