Rspec使用测试,Capybara使用开发数据库。

3

我有一个有趣的问题。我正在使用Rspec进行测试驱动开发,Capybara与Poltergeist一起进行验收测试。还有FactoryGirl。Rspec和FactoryGirl正在使用测试数据库进行操作,这正是我想要的。问题在于验收测试正在使用开发数据库进行操作。

这会导致以下简单测试失败:

  my_class = FactoryGirl.create(:my_class)
  visit my_classes_path
  expect(page).to have_content(my_class.title)

我甚至使用以下方法检查了沿途的截图:

page.save_screenshot("screenshot#{__FILE__}_#{__LINE__}.png")

解决方案 显然,Capybara在启动“rails server”时尝试使用与本地环境中初始化的相同的URL和端口。在我的Capybara配置中指定不同的端口即可解决问题,如下所示:

Capybara.configure do |c|
  c.run_server = true
  c.javascript_driver = :poltergeist
  c.default_driver = :poltergeist
  c.server_port = 7000
  c.app_host = "http://localhost:#{c.server_port}"
end

3
如果您已经解决了自己的问题,可以将解决方案作为答案添加到自己的问题中,以帮助未来可能遇到相同问题的人,并获得一些互联网积分。 - p4sh4
谢谢!Matt,你救了我~ - Gupta
1个回答

2

通常情况下,您不需要锁定到特定端口或设置app_host。如果未设置app_host,则Capybara默认为http://#{Capybara.server_host}:#{Capybara.server_port},默认情况下为http://127.0.0.1:<the capybara运行服务器的端口。如果您需要使用localhost而不是127.0.0.1(因为IPv6或其他原因),则只需设置

Capybara.server_host = 'localhost'

与其使用应用程序主机和修复端口号,更好的方案是使用域名(domain)。
当你尝试测试一个外部网站或需要访问子域以测试你的应用时,app_host才有用;而修复端口则更适用于与防火墙等相关的问题。


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