当全局常量抛出错误时如何执行rspec?

时间:2015-11-24 08:52:04

标签: ruby-on-rails ruby rspec gem

我的gem中有Constant,它会在启动服务器时从使用应用程序中获取数据。但是当我执行测试用例时如何跳过对常量的调用以便它不会抛出任何错误。

#file in my gem
class FallbackConfig
  DATA  = YAML.load(File.open(File.join('config','fallback_data','data.yml')))       
end

使用gem运行应用程序时没有问题。但是当我执行测试用例时,那个时候它也在寻找这个值并抛出跟随错误。

Praveen-Mac-mini:global-nav-gem brilliomac$ rspec spec
Coverage report generated for RSpec to /Users/brilliomac/Desktop/global-nav-gem/coverage. 22 / 88 LOC (25.0%) covered.
/Users/brilliomac/Desktop/global-nav-gem/lib/global_nav_gem/configuration_file.rb:2:in `initialize': No such file or directory @ rb_sysopen - config/fallback_data/global_nav_data.yml (Errno::ENOENT)

3 个答案:

答案 0 :(得分:0)

你可以在测试中试试这个:

          // change logic here (to add userinput)
            counter <= clkdivider-1; 

您可以找到有关使用rspec here

来存储常量的更多信息

答案 1 :(得分:0)

将常量切换为记忆数据的类方法:

DirectoryEntry

然后更改常量的用户以改为调用类方法。数据将被加载 - 只需一次 - 如果它被使用,但如果未使用则不加载。

答案 2 :(得分:0)

要求你的文件将立即调用解析YAML文件,剥夺改进类或重新定义常量或其他任何东西的可能性。我在这种情况下看到的唯一解决方案(但我不喜欢它)是在需要文件之前临时重新定义YAML.load方法然后恢复它。

但肯定使用类方法而不是常量,因为@ wayne-conrad建议会更容易。