Настройка генераторов Rspec в Rails 3 - PullRequest
4 голосов
/ 02 ноября 2011

Я пишу движок Rails 3.1 и тестирую с RSpec 2. Когда я использую rails generate, я получаю файлы спецификаций, сгенерированные для меня автоматически, что так удобно:

$ rails g model Foo
  invoke  active_record
  create    db/migrate/20111102042931_create_myengine_foos.rb
  create    app/models/myengine/foo.rb
  invoke    rspec
  create      spec/models/myengine/foo_spec.rb

Однако, чтобычтобы сгенерированные спецификации хорошо играли с моим изолированным пространством имен, мне нужно каждый раз оборачивать спецификацию вручную в модуле:

require 'spec_helper'

module MyEngine
  describe Foo do
    it "should be round"
    ...
  end
end

Я хотел бы знать, есть ли чистый и простой способ изменить автоматически сгенерированные«шаблоны» спецификаций, так что мне не нужно оборачивать спецификацию в Module MyEngine каждый раз, когда я генерирую новую модель или контроллер.

Ответы [ 2 ]

6 голосов
/ 15 ноября 2012

Вы можете скопировать шаблоны RSpec, используя задачу Rake, например:

namespace :spec do
  namespace :templates do
    # desc "Copy all the templates from rspec to the application directory for customization. Already existing local copies will be overwritten"
    task :copy do
      generators_lib = File.join(Gem.loaded_specs["rspec-rails"].full_gem_path, "lib/generators")
      project_templates = "#{Rails.root}/lib/templates"

      default_templates = { "rspec" => %w{controller helper integration mailer model observer scaffold view} }

      default_templates.each do |type, names|
        local_template_type_dir = File.join(project_templates, type)
        FileUtils.mkdir_p local_template_type_dir

        names.each do |name|
          dst_name = File.join(local_template_type_dir, name)
          src_name = File.join(generators_lib, type, name, "templates")
          FileUtils.cp_r src_name, dst_name
        end
      end
    end
  end
end

Затем вы можете изменить код в #{Rails.root}/lib/templates/rspec/model/model_spec.rb, включив имя модуля.

4 голосов
/ 17 августа 2012

Скопируйте файл /lib/generators/rspec/scaffold/templates/controller_spec.rb из гема rspec-rails в вашу папку app / lib / templates / rspec / scaffold и настройте его.Очевидно, что если вы перейдете на новую версию rspec-rails, вам нужно убедиться, что ваш настроенный шаблон не устарел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...