【问题标题】:`dirname': can't convert nil into String (TypeError)`dirname': 无法将 nil 转换为字符串 (TypeError)
【发布时间】:2011-10-28 09:50:17
【问题描述】:

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

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)

虽然很奇怪,它有不同的黄瓜导轨版本,我用谷歌搜索了第一个结果显示这是 bunder 的错(虽然我无法破译要点是什么......也许只是复制粘贴的东西?)最奇怪的是, Cucumber 正在运行,我在运行rspec spec 时遇到了这个问题。

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

【问题讨论】:

    标签: ruby rspec cucumber bundler


    【解决方案1】:

    这是由于捆绑程序如何尝试“自动要求”宝石造成的。在 1.0 中,bundler 会尝试 gem 名称(在本例中为“cucumber-rails”)并在找不到文件时消除错误(它不是)。

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

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

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

    【讨论】:

      【解决方案2】:

      新的 cucumber-rails 版本会警告您这个问题。 Cucumber-rails 应该在 env.rb 文件中是必需的,而不是在 bundler 之前。为此,请将 gem cucumber-rails 行放入 Gemfile 中的 :test 组中。

      【讨论】:

      • 这在一个旧的版本锁定项目上对我有用。很高兴知道捆绑程序会自动加载您的 gem,尤其是如果您在旧 gem 中有 VAR = (something) unless defined? VAR 之类的代码(就像这个项目一样)
      【解决方案3】:

      正如 aslak 在他的回复中所说:

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

      我只需要升级 cucumber-rails。 @Ewout 也确实为我指明了正确的方向,所以他也值得 +1 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 2013-04-17
        • 1970-01-01
        相关资源
        最近更新 更多