tom*_*ski 4 rspec ruby-on-rails ruby-on-rails-3
我正在编写一个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
Run Code Online (Sandbox Code Playgroud)
但是,为了使生成的规范与我的隔离命名空间很好地配合,我必须每次在模块中手动包装规范:
require 'spec_helper'
module MyEngine
describe Foo do
it "should be round"
...
end
end
Run Code Online (Sandbox Code Playgroud)
我很想知道是否有一种干净简单的方法来修改自动生成的规范'模板',这样我就不必在Module 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
Run Code Online (Sandbox Code Playgroud)
然后,您可以修改代码#{Rails.root}/lib/templates/rspec/model/model_spec.rb以包含模块名称.
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |