当我运行rspec来运行所有测试时,它们都会通过,但是当我给出一个特定的文件名时,它会失败。
$ rspec spec/controllers/refinery/books/admin/books_controller_spec.rb
2) Refinery::Books::Admin::BooksController GET :new responds 200 success
Failure/Error: login_admin_user #Gives 404
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled. Unregistered request: POST http://localhost:8981/solr/default/update?wt=ruby with body '<?xml ...' with headers {'Content-Type'=>'text/xml'}
You can stub this request with the following snippet:
stub_request(:post, "http://localhost:8981/solr/default/update?wt=ruby").
with(:body => "<?xml ...",
:headers => {'Content-Type'=>'text/xml'}).
to_return(:status => 200, :body => "", :headers => {})
registered request stubs:
stub_request(:post, "http://localhost:8983/solr/test/update?wt=ruby").
with(:headers => {'Content-Type'=>'text/xml'})
============================================================
# ./lib/rsolr/connection.rb:15:in `execute'
# (eval):2:in `post'
# ./spec/support/controller_macros.rb:21:in `login_admin_user'
我有嘲笑&amp;已经存在,所以为什么会失败?我唯一能看到的是现有存根是'/ test /'而请求是'/ default /'。这是怎么改变的?
好的,我又在另一个规格上遇到了这个问题。这是规格: https://gist.github.com/starrychloe/1d79d9925f9b79ae5c01
我找到了这个solr / solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
<cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:}">
<core name="default" instanceDir="." dataDir="default/data"/>
<core name="development" instanceDir="." dataDir="development/data"/>
<core name="test" instanceDir="." dataDir="test/data"/>
</cores>
</solr>
就像rspec在生产环境中运行一样,即使我明确地给出了环境
$ RAILS_ENV=test rspec spec/controllers/refinery/books/books_controller_spec.rb
我认为这是一个rspec问题。 rspec -v
:版本2.14.7。
答案 0 :(得分:2)
我在stub_request(:post, "http://localhost:8981/solr/default/update?wt=ruby").to_return(:status => 200, :body => "", :headers => {})
之前添加了login_admin_user
,但我不认为这是根解决方案。
答案 1 :(得分:2)
它可能与另一项测试相互作用。
尝试以随机顺序运行套件
rspec spec --order rand
和/或尝试运行该控制器或控制器的所有测试。
答案 2 :(得分:0)
您正在使用webmock,默认情况下禁用所有HTTP连接。
您可以修改Gemfile以禁用自动要求,如下所示:
gem "webmock", :require => false
并且需要webmock(例如require 'webmock/rspec'
)。在为某些测试禁用HTTP连接后,请记住WebMock.allow_net_connect!
以允许其他测试使用真正的http连接。
另一种选择是WebMock.disable_net_connect!(:allow_localhost => true)
在允许localhost时禁用外部请求。