用于测试 Ruby Gem 的嵌套项目

发布于 2024-11-07 01:47:54 字数 363 浏览 0 评论 0原文

当为特定应用程序框架创建 gem 时,我将一个项目嵌套在测试目录中的 gem 中。例如,对于 Rails 特定的 gem,我将设置一个目录结构,如下所示:

Rakefile
Gemfile
attached.gemspec
lib/attached.rb
lib/...
test/Gemfile
test/app/...
test/...

为了测试,我使用 gem 'attached', path: '...' 设置嵌套项目 Gemfile 并运行 rake test 在测试目录中。是否可以向我的主 Rakefile 添加一个任务,该任务将允许我在子项目中运行测试,而无需先更改到目录?

When creating a gem for a specific application framework, I nest a project within the gem in a test directory. For example, with a Rails specific gem I'd setup a directory structure like:

Rakefile
Gemfile
attached.gemspec
lib/attached.rb
lib/...
test/Gemfile
test/app/...
test/...

To test, I setup the nested project Gemfile using gem 'attached', path: '...' and run rake test inside the test directory. Is it possible to add a task to my main Rakefile that will allow me to run the tests in my sub project without changing into the directory first?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼波传意 2024-11-14 01:47:54

我总是使用 gem enginex 来帮助我使用集成的 Rails 应用程序设置我的 gem。

在根 Rakefile 中,他们写道:

require 'rake/testtask'

Rake::TestTask.new(:test) do |t|
  t.libs << 'lib'
  t.libs << 'test'
  t.pattern = 'test/**/*_test.rb'
  t.verbose = false
end

task :default => :test

他们不使用嵌套的 Gemfile,而是在 test_helper.rb 中加载 Rails 项目,并且 Rails 是gem 的开发/测试依赖项。

要查看 gem:

gem install enginex

或者查看来源。这个 gem 作为新的插件生成器包含在 Rails 3.1 中。

I always use the gem enginex to help me setup my gems with an integrated rails application.

In the root Rakefile they write:

require 'rake/testtask'

Rake::TestTask.new(:test) do |t|
  t.libs << 'lib'
  t.libs << 'test'
  t.pattern = 'test/**/*_test.rb'
  t.verbose = false
end

task :default => :test

They do not use a nested Gemfile, instead they load the Rails project inside the test_helper.rb and rails is a development/test dependency of the gem.

To check out the gem:

gem install enginex

Or check the source. This gem is included in rails 3.1 as the new plugin generator.

陈年往事 2024-11-14 01:47:54

最简单的方法(我认为最不容易出现错误)是执行如下任务:

task :test do
  system('cd test; bundle exec rake test')
end

另一种更复杂的方法是将所有“子任务”包含在根 Rakefile 中,为每个任务添加一个先决条件,这将更改当前目录,如下所示:

task :change_dir do
  puts 'changing dir'
  Dir.chdir('test')
end

namespace :sub do
  load 'test/Rakefile'
end
Rake::Task.tasks.select{|t| t.name.start_with?('sub:')}.each do |task|
  task.prerequisites.insert(0, 'change_dir')
end

但我不确定这将如何与捆绑器一起使用。

我向您推荐的最后一件事是查看 bundle gem 命令创建的项目结构。我现在将它用于我所有的宝石,我相信利用它会让您的问题完全消失:)

The simplest way (and I think the least bug prone), would be to have a task like:

task :test do
  system('cd test; bundle exec rake test')
end

The other, more complicated way would be to include all "subtasks" in the root Rakefile add a prerequisite to each one of them, that will change the current directory, like so:

task :change_dir do
  puts 'changing dir'
  Dir.chdir('test')
end

namespace :sub do
  load 'test/Rakefile'
end
Rake::Task.tasks.select{|t| t.name.start_with?('sub:')}.each do |task|
  task.prerequisites.insert(0, 'change_dir')
end

I'm not sure how this will work with bundler though.

One last thing that I would recommend to you is to take a look at a project structure that bundle gem command creates. I use it for all my gems now, and I believe that taking advantage of it would make your problem go away entirely:)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文