我一直在使用Michael Hartl的Rails Tutorial来学习Ruby on Rails,最近还在学习新的Rails4.0版本的教程。我遇到了Spork的问题;我知道我们正在使用Spork的自定义分支来兼容Rails 4.0,这可能只是一个不同的不兼容,但我想发布我的问题,看看我是不是做错了什么,或者是否有人有什么想法。每当我在Spork运行的时候调用RSpec时,我就会得到一个ActiveRecord异常,而如果我调用RSpec本身,我的测试就会成功运行--一个示例终端转储如下:
oren@VM:~/ruby_projects/test_app$ rspec
Exception encountered: #<ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished>
backtrace:
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:546:in `retrieve_connection'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/connection_handling.rb:79:in `retrieve_connection'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/connection_handling.rb:53:in `connection'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:792:in `current_version'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:800:in `needs_migration?'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:379:in `check_pending!'
/home/oren/ruby_projects/test_app/spec/spec_helper.rb:105:in `<top (required)>'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `block in load'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:11:in `block in run'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:21:in `block in initialize'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:18:in `fork'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:18:in `initialize'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:9:in `new'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:9:in `run'
/home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/server.rb:48:in `run'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1588:in `perform_without_block'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1548:in `perform'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1626:in `block (2 levels) in main_loop'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1622:in `loop'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1622:in `block in main_loop'我可以根据要求提供我的应用程序中的任何文件,我只是不确定什么是最有用的。我基本上遵循了教程第三章的前几个步骤(设置新的应用程序,添加StaticPages控制器,设置RSpec,并添加第一个规范)以及设置Guard和Spork的说明。3.6.2和3.6.3)。
谢谢你的帮忙!
发布于 2013-06-26 21:59:08
您的spec/spec_helper.rb可能有问题。用https://github.com/railstutorial/sample_app_rails_4/blob/master/spec/spec_helper.rb替换您已有的内容,看看这是否能解决问题。
发布于 2013-07-31 23:00:28
我也遇到过同样的问题,但我不明白你把“现有环境”移到Spork.prefork块是什么意思。据我所知,清单3.37应该是一个完整的spec/spec_helper.rb文件。然而,这个文件对我并不起作用:我得到了“连接未建立错误”。
编辑:啊,我终于明白你的意思了。在不适用于我的spec/spec_helper.rb文件版本中,在我的文本编辑器底部运行的文件末尾有一个巨大的注释块,在这些注释之后还有另一个prefork块隐藏。所以你要做的就是复制清单3.37,然后打开spec/spec_helper.rb,‘全选’,然后粘贴。
另一方面,github上的spec/spec_helper.rb文件确实适合我。我对这两个文件运行了diff,在prefork块的末尾,git集线器的版本有所不同:
清单3.37:
config.order = "random"
config.include Capybara::DSL
end
endgithub:
config.order = "random"
# Include the Capybara DSL so that specs in spec/requests still work.
config.include Capybara::DSL
# Disable the old-style object.should syntax.
config.expect_with :rspec do |c|
c.syntax = :expect
end
end
end我不明白添加的代码与连接有什么关系,但在多次尝试清单3.37并获得连接错误后,我将文件更改为github版本,并得到以下输出:
$ time bundle exec rspec spec/requests/static_pages_spec.rb --drb
........
Finished in 0.19795 seconds
8 examples, 0 failures
Randomized with seed 27433
real 0m5.568s
user 0m3.617s
sys 0m0.832s然后,我将spec/spec_helper.rb改回清单3.37所示的版本,并且再次得到连接错误。所以清单3.37不起作用(编辑:是,它起作用,请参见初始编辑)。
编辑:注意:如果您使用清单3.37,您将不会得到以下错误:
接下来,在本教程中执行了更多步骤后,我注意到Guard正在输出测试失败:
Failures:
1) StaticPagesController GET 'home' returns http success
Failure/Error: response.should be_success
NoMethodError:
undefined method `should' for #<ActionController::TestResponse:0x000001046dba00>
# ./spec/controllers/static_pages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'
2) StaticPagesController GET 'help' returns http success
Failure/Error: response.should be_success
NoMethodError:
undefined method `should' for #<ActionController::TestResponse:0x00000104700058>
# ./spec/controllers/static_pages_controller_spec.rb:15:in `block (3 levels) in <top (required)>'
Finished in 0.24867 seconds
13 examples, 2 failures, 3 pending这些失败来自自动生成的测试文件,这些文件使用名为should()的方法,而spec/spec_helper.rb文件的github版本禁用了该方法:
# Disable the old-style object.should syntax.
config.expect_with :rspec do |c|
c.syntax = :expect
end在本教程的前面部分,我们只在一个文件中运行测试:
spec/requests/static_pages_spec.rb但是现在Guard和Spork被设置为运行所有测试文件中的所有测试。
为了避免测试失败,我只注释掉了下面的代码:
/spec/controllers/static_pages_controller_specGuard也有一些不同颜色的输出,它说:
Pending:
...教程还没有讨论它,但是在测试中你可以只写“pending”,如下所示:
describe StaticPagesHelper do
pending "add some examples to (or delete) #{__FILE__}"
end然后,当您运行测试时,输出将通过显示“Pending”输出来提醒您仍需编写测试。如果你看一下:
spec/helpers/static_pages_helper_spec.rb这就是悬而未决的测试的来源。
发布于 2014-01-10 00:11:43
我也收到了同样的错误。我想这是因为我同时在跑后卫和叉子。如果你遵循本教程,那么在设置spork之前,它永远不会告诉你退出防护。如果你做了退出保护,然后运行spork和这个命令,你不会得到这个错误。本教程的下一步将向您展示如何同时运行guard和spork。
https://stackoverflow.com/questions/17311480
复制相似问题