`dirname':无法将nil转换为String(TypeError)

时间:2011-10-28 09:50:17

标签: ruby rspec cucumber bundler

我不确定这是否真的是黄瓜,但以防万一你们有些人知道如何解决这个问题。基本上,我的测试突然停止工作,当我检查时,它显示了这个错误:

C:/Vendor/Ruby187/lib/ruby/gems/1.8/gems/cucumber-rails-1.0.0/lib/cucumber/rails3.rb:3 in 'dirname': can't convert nil into String (TypeError)

是的,我第一次睁开眼睛,只是诅咒了Windows,但我在Mac上尝试了它,我得到了同样的结果:

/Users/eumir/.rvm/gems/ruby-1.8.7-p174@mygemset/gems/cucumber-rails-0.5.2/lib/cucumber/rails3.rb:3:in `dirname': can't convert nil into String (TypeError)

奇怪的是,它在不同的黄瓜轨道版本中,我用Google搜索并且第一个结果显示它是错误的(虽然我无法解读要点是什么......也许只是复制粘贴的东西?)并且最奇怪的是,Cucumber正在运行,我在运行rspec spec时遇到了这个问题。

下面的3条线索指出它不是黄瓜的错,但为什么它归咎于黄瓜呢?如果你们中的任何一个人能够了解为什么会发生这种情况,那么你将会让我免受几个小时的痛苦。

3 个答案:

答案 0 :(得分:20)

这是由于捆绑者试图“自动获取”宝石的原因。在1.0中,bundler尝试使用gem名称(在本例中为“cucumber-rails”),如果找不到该文件(不是)则会导致错误。

在bundler 1.1.1中,bundler将“ - ”的实例替换为“/”,导致它自动获取“cucumber / rails”,导致Ewout描述的“意外”加载。

要解决此问题,请在您的gemfile中设置:require => false

(注意::require => false并不意味着gem是可选的,只是Bundler不应该自动要求它)

答案 1 :(得分:8)

新的cucumber-rails版本警告你这个问题。应该从env.rb文件中获取Cucumber-rails,而不是捆绑器之前。要实现这一点,请将gem cucumber-rails行放在组中:在Gemfile中进行测试。

答案 2 :(得分:2)

aslak在回答中说:

http://groups.google.com/group/cukes/msg/803836e9f6e7f1be

我只需要升级黄瓜轨道。 @Ewout确实指出了我正确的方向,所以他也值得+1:)