2014-12-31 55 views
0

我做一个RSpec功能来测试一些用户故事,我收到错误消息对Rspec的(回报率)表:模块化和

Internal Server Error uninitialized constant Tree::MY_BRAnCH 

现在,我知道测试失败,因为表“树“没有正确的行,但只有在运行套件测试时才会失败。

RAILS_ENV=test bundle exec rspec spec/ 

指向articles_spec.rb文件为负责。但如果我只运行功能文件:

RAILS_ENV=test bundle exec rspec spec/features/articles_spec.rb 

测试通过正常。挖在我看其他显影剂制成的测试与所述指示的代码:

before { truncate(Tree) } 

使执行测试的第一和被除去在表中的数据。

我的问题是:如何避免这种情况?需要我在每个rspec文件之前重新加载所有数据库?

或者我们应该遵循什么策略来确保rspec测试不影响其他开发者?

回答

1

截断数据库表似乎不太可能导致uninitialized constant错误。更有可能的是,articles_spec.rb导致Tree::MY_BRAnCH被定义。这就是为什么单独运行articles_spec.rb。当你运行整个规格套件时,有些东西试图在定义之前使用该常量,因此uninitialized constant

一个解决方案可能是搜索您的代码库以使用Tree::MY_BRAnCH,并确保它在使用之前已被定义。您可能需要了解的下面的代码加载技术的一种或多种: