2012-08-28 23 views
12

我on Rails的3.2和我使用的RSpec(2.11.1)。当我用“rake spec”运行我的测试套件时,我遇到了失败。当我用“rspec”运行它时,一切都会通过。我已经看到其他提到这个问题,但没有解释正在发生的事情和最佳实践是什么。我应该使用“耙规范”或“rspec的”(不能得到“回扣规范”工作)?

如果我做“rake spec”或“rake tmp:clear & & rake spec”我的测试失败。

如果我做“rspec”或“rspec spec”或“rake db:test:prepare & & rspec”我的测试通过。

我认为,唯一的区别是,耙做“分贝:测试:准备”,但如果我的RSpec运行前做手工,我的测试都通过了以至于不能将所有的故事。

做一点阅读后,我改变了我的Gemfile。之前,我已经按照“RSpec Book”(p328)的说法设置了它,它将rspec gem放在“group:development,:test”块中。阅读了一些其他的SO帖子后,我删除了“:开发”并做了一个捆绑。现在“rake spec”什么都不做。 “rspec”仍然像以前一样工作。

很困惑......

+3

做了一些进一步的探测。根据rspec书(具有:development,:test)的Gemfile运行rspec使用'test'环境,而rake spec使用'development'环境。目前还不确定这是为什么,但将继续寻找... – starfry

+3

“RAILS_ENV ='测试'耙规格”的作品。我本来期望测试,以默认的测试环境没有我具体... – starfry

+0

我的答案被删除(@礼貌bhargav饶)作为复制http://stackoverflow.com/questions/15701298/rspec的-spec耙-SPEC-给-不同-结果/ 41877864#41877864 –

回答

9

尝试运行RAILS_ENV=test rake spec

+0

AFAIK这是不好的,因为'耙spec'会调用'分贝:模式:load'在某些时候,如果你设置环境这样,会尝试从'test'加载模式到'test'? – Ali

3

下面是固定的对我来说。 我也能运行rake spec RAILS_ENV=test 我有我的Gemfile这样

group :developmet do 
    gem 'rspec-rails','2.9.0' 
... 
end 
group :test do 
    gem 'rspec-rails','2.9.0' 
... 
end 

我改成了这一点,使得用于测试和开发的模块,并把它发展状态之前。我也确保我的数据库迁移全部进入了测试数据库。 db:migrate RAILS_ENV=test

group :development,:test do 
    gem 'rspec-rails','2.9.0' 
     ... 
end 
group :development do 
    ... 
end 
+2

嗯......那些功能是相同的,除了可能在原始Gemfile中“开发”的拼写错误?这会导致rspec不加载(无提示失败)。 – Rob

3

根据rspec的护栏github上,把RSpec的护栏宝石在Gemfile中的开发和测试组。这是因为在切换到测试环境之前,测试rake任务首先加载开发环境。另外,如果您使用的是Gemfile,请使用“bundle exec rake spec”运行您的所有规格。要运行单个spec文件,请使用“bundle exec rake rspec path/to/spec_file”。使用“bundle exec”可确保您使用通过Gemfile安装的正确的rake命令,而不是使用系统rake命令。

参考:https://github.com/rails/rails/issues/8591