缺少链接的主机名!请提供:host参数,设置default_url_options [:host]或将:only_path设置为true。

6

我正在学习Rails 4 in Action。在使用Rspec和Capybara进行测试时,我遇到了上述错误。我的viewing_projects_spec.rb文件如下:

require 'spec_helper'

feature "Viewing projects" do
  scenario "Listing all projectcs" do
    project = FactoryGirl.create(:project, name: "TextMate 2")
    visit '/'
    click_link 'TextMate 2'
    expect(page.current_url).to eql(project_url(project))
  end
end

剩余的错误信息为:Failure/Error: expect(page.current_url).to eql(project_url(project))

我进行了一些搜索,人们建议将以下内容放入 config/environments/development.rb 中:

Rails.application.routes.default_url_options[:host] = 'localhost:3000'

很不幸,这并没有做任何事情。

1个回答

8

将host语句放入config/environments/test.rb而不是development.rb中,因为您正在运行测试。

添加

您看到“example.com”的原因是Capybara将其设置为默认主机。 要更改它,请在require 'capybara'之后的spec_help中添加以下行:

Capybara.default_host = 'localhost:3000'

参考: https://rspec.lighthouseapp.com/projects/16211-cucumber/tickets/206

然后你的URL应该与test.rb中设置的匹配。

无论如何,我更喜欢不直接使用current_path来避免麻烦。


好的,在测试中放置后,我得到了这个结果:期望值:"http://localhost:3000/projects/41" 实际值:"http://www.example.com/projects/41" - Mike Glaz
3
如果我更改为 Rails.application.routes.default_url_options[:host] = 'www.example.com',测试就能通过。 - Mike Glaz
@mikeglaz,已经快了。也许你在某个地方设置了“example.com”,只需全局搜索整个项目并进行更改就可以了。 - Billy Chan
@mikeglaz,除此之外,我个人更喜欢使用current_path而非current_url,因为current_path中没有域名,所以出错的概率更小。 - Billy Chan
奇怪,这破坏了我所有的测试。但它们都有相同的错误Failure / Error:visit“/”NoMethodError:undefined method '[]' for nil:NilClass - Mike Glaz
显示剩余2条评论

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