在用Ruby开发gems时,我几乎总是需要一个文件,在其中我可以根据自己的需要配置RSpec,在这样做之前,可能需要一些助手模块,这些模块应该在我的spec个示例中都可用.

在Rails应用程序中,名为spec/spec_helper.rb的文件用于此目的.让我恼火的一件事是,在典型的Rails环境中,您必须需要这个spec_助手.rb文件中包含要加载的示例的每个文件.在过go ,我对此有很多问题,涉及到在示例文件中更改加载路径和相对require路径.

现在,对于我的gems,我希望有一种方法可以直接说RSpec来要求spec_助手.rb文件,然后再加载任何示例文件.如果我调用rspec executable,或者我可能在Rakefile中定义的rake spec任务,这与事实无关.

我知道我只能告诉RSpec我的spec_助手的位置.rb是这个spec_助手.rb需要手动获取所有示例文件,但我也希望避免这种方法的额外维护.

有没有更好的方法来实现这一点?

推荐答案

在RSpec 2中,/spec文件夹始终自动位于加载路径上.这意味着您只需要:

require 'spec_helper'

在规格文件的顶部.这将始终加载/spec/spec_helper.rb,这是您能够逃脱的最小负载.

这意味着你需要一种可怕的方法,比如:

require File.join(File.dirname(File.dirname(__FILE__)), 'spec_helper.rb')

(需要针对不同的嵌套级别进行更新).

此外,您还可以在.rspec文件中添加选项:--require spec_helper,这将在每个等级库文件中都需要该文件,而不需要顶部的手动require语句.

Ruby相关问答推荐

如何保证散列中的对象不完全相同

使用Mac命令行解密用Ruby加密的Zip

如何在 Ruby 中验证来自多项 Select 提示的命令行输入?

多线程期间的 MRI ruby​​ 内存访问特性

如果 Java 人go Scala,C# go F#,那么 Ruby 人go 哪里寻求函数式?

Rspec:应该是(this or that)

如何修改 Ruby gem

Rspec: expectvsexpect什么区别?

如何使用 RSpec 忽略或跳过测试方法?

有没有办法通过哈希初始化对象?

带有索引的 Ruby `each_with_object`

可可豆荚安装在iOS项目上不起​​作用

如何让 Ruby 解析时间,就好像它在不同的时区一样?

我可以在 Ruby 2.x 中要求命名参数吗?

如何自定义 Jekyll 的 url?

Ruby 中的 method_missing trap

发现 Ruby 对象成员?

HAML 中 Javascript 中的 Ruby 方法

如何解决/usr/bin/env: ruby​​_executable_hooks: No such file or directory?

如何在文件夹及其所有子文件夹中搜索特定类型的文件