黄瓜/ Rails 错误未初始化常量 DatabaseCleaner(NameError)

11

有人知道在运行cucumber features时导致这个错误的原因吗?

uninitialized constant DatabaseCleaner (NameError)

1
你是否已经安装了database_cleaner gem(如果使用rails3,是否已经在gemfile中声明了它)? - Jesse Wolgamott
不,我没有。我从来没有在我的gemfile中指定过它... - DanS
添加它确实解决了问题 - 虽然知道是什么原因引起的会很有趣。默认格式现在也是“pretty”,这是我以前从未遇到过的。 - DanS
4个回答

16

将以下行添加到您的Gemfile中:

gem 'database_cleaner'

这是因为 cucumber-rails 没有自动依赖于 database_cleaner,因为你可能在构建一个没有数据库的 Rails 应用程序,所以你必须显式地引用它。


4
我还在spec_helper.rb中添加了require 'database_cleaner'以处理这个异常。 - Mike Jarema

4
DatabaseCleaner是一个用于“清理”数据库的库。Cucumber会在运行功能之间使用它,以确保您的数据库处于可测试状态(即为空)。这个想法是,在每个测试的Given子句中积累适当的数据。
这个错误只是意味着DatabaseCleaner没有被正确地引入。
不同版本的Rails/Cucumber有不同的配置方式,并提供不同的功能,因此很难在不知道您的设置的情况下给出正确的解决方案。
然而,有几个提示:
看看cucumber-rails gem。它为您提供了许多好东西,例如生成器和rake任务,因此您可以运行rake cucumber而不是直接使用cucumber。通常情况下,生成器将构建一个配置文件,该文件为您需要的database_cleaner进行了引用。
否则,请将database_cleaner添加到您的依赖列表中,并在您的测试套件代码中的某个地方放置require 'database_cleaner'

当我运行rails g cucumber:install时,我的Gemfile中有Webrat,后来我切换到了Capybara...也许这与此有关? - DanS
3
这个回答过长了,而且回答的问题也不明确。“依赖清单”是什么?对于新手来说他们怎么会知道呢?请具体说明。 - Ryan Bigg
1
不应该影响你使用的无头浏览器……如果你已经执行了 cucumber:install,尝试使用 rake 任务进行测试,而不是直接使用 cucumber 命令,这可能会设置额外的依赖项:https://github.com/aslakhellesoy/cucumber/wiki/Using-Rake - brad

1

我刚遇到了这个问题。我将我的cucumber gem降级到版本1.0.6,然后我得到了这个消息:

uninitialized constant Cucumber::Rails::Database (NameError)

当我使用cucumber 1.0.6(不是最新版本)和database_cleaner v. 1.7.0时。为了修复错误,我只需在Rails 3.1.3上运行此命令:

rails g cucumber:install

它会提示您替换文件features/support/env.rb。只需回答Y,然后您就可以再次运行rake cucumber:ok


0

我正在使用Spring,但spring stop对我不起作用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接