【问题标题】:Developing gems and testing开发 gems 和测试
【发布时间】:2011-05-28 10:41:29
【问题描述】:

我是开发 Ruby gem 的新手,但我想我会尝试一下。

最近查看 Railscasts 的最新一集 (http://railscasts.com/episodes/245-new-gem-with-bundler) 我正在使用 Bundler 创建我的 gem。

但是我对如何测试我的宝石一无所知。

当然我可以运行 rake install,然后从 irb 请求它,但这对我来说似乎是一种缓慢的工作流程。

我想做的是创建一个虚拟 Rails 应用程序并通过引用它的源代码来要求 gem。这可能吗?我确定我在某处读到过它……

谢谢!

【问题讨论】:

  • ps。刚刚注意到我可以在 irb 中执行“需要'lib/my_gem'”,而我不需要安装它。但是如果我想在 Rails 中做同样的事情怎么办? ds.

标签: ruby-on-rails ruby gem


【解决方案1】:

您可以在您的 Rakefile 中包含这些行:

task :console do
  exec "irb -r mygem -I ./lib"
end

这将创建一个 rake 任务来初始化一个新的 irb 会话并预加载您的库。现在,您所要做的就是:

$ rake console

【讨论】:

  • 自动化测试很棒,但有时您需要四处寻找才能弄清楚事情是如何工作的。这很好地促进了这一点。将 irb 替换为 pry 以获得更多收益。
【解决方案2】:

我不能推荐 Ryan Bigg 的这份指南:http://bundler.io/v1.16/guides/creating_gem.html。它会引导您使用 Bundler 生成 gem 并设置自动化测试。您可以开发您的功能,而无需实际手动运行您的代码。这是我在自己的 gem 开发中使用的工作流程,到目前为止运行良好。

更新:重读您的问题,听起来您的 gem 是 Rails 引擎。我建议看看 José Valim 的 EngineX。它是一个生成器,可以创建一个带有用于测试的虚拟 Rails 应用程序的 gem (https://github.com/josevalim/enginex)。如果您已经有很多代码,http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/ 可能会帮助您设置一个虚拟应用程序进行测试。

【讨论】:

    【解决方案3】:

    你实际上可以这样做:

    cd ~/my_gem_path & bundle console

    这将是一个快速测试:

    My::Gem::VERSION

    【讨论】:

    • 酷,如果您使用pry 而不是irb,还有一个额外的(准时)步骤:bundle config console pry
    【解决方案4】:

    您可以reference the gem locally,但如果您不想在每次更改 gem 时都运行 bundle update,您可以只要求使用文件的完整路径,或者将您的 gem 移动(或符号链接)到 /供应商。

    但老实说,听起来您需要编写一些测试! ;) 手动测试您所做的每项更改都会变得令人厌烦且容易出错。如果您不熟悉编写 gem,请查看其他流行 gem 的来源并了解它们是如何测试的。

    【讨论】:

    • 哈哈,是的,在阅读了您和乔的答案之后,我可以看到测试的好处。谢谢!
    • 手动测试很棒,但您还需要能够手动遍历您的代码,以发现您的测试缺少的用例。 Plus 测试并不总是完美地重现“实时”工作,您必须至少检查一次代码才能找到它们。
    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多