加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rails 3中自定义Rspec生成器

发布时间:2020-12-17 03:53:19 所属栏目:百科 来源:网络整理
导读:我正在编写Rails 3.1引擎并使用RSpec 2进行测试.当我使用rails generate时,我会自动为我生成spec文件,这非常方便: $rails g model Foo invoke active_record create db/migrate/20111102042931_create_myengine_foos.rb create app/models/myengine/foo.rb
我正在编写Rails 3.1引擎并使用RSpec 2进行测试.当我使用rails generate时,我会自动为我生成spec文件,这非常方便:

$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

我很想知道是否有一种干净简单的方法来修改自动生成的规范’模板’,这样我就不必在每次生成新模型或控制器时将模块包含在模块MyEngine中.

解决方法

您可以使用Rake任务复制RSpec的模板,例如:

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中的代码以包含模块名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读