2013-03-09 71 views
6

以下是集成测试用例,其中带有水豚3.2.12。 click_link 'New Log'是ajax调用。然而,打开的页面以$()开头,并且有一堆js像\ n和\ log-log一样转义。带水豚的集成测试错误,用于带导轨的ajax调用3.2.12

it "should work with link on show customer_comm_record page" do 
     visit customer_customer_comm_records_path(@cust) 
     #visit customer_customer_comm_record_path(@cust, @crecord) 
     click_link @crecord.id.to_s  
     click_link 'New Log' 
     save_and_open_page 
end 

我们也试图与describe "", :js => true do包裹的情况下,如何有一个错误说

`An error occurred in an after hook ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked:` 

没有错误了代码执行。 rspec案件有什么问题?感谢帮助。

+0

当您看到此消息时,是否打开Rails控制台? – 2013-03-09 05:56:51

+0

我没有试过导轨控制台。是否有新的从轨道控制台的错误? – user938363 2013-03-09 16:56:01

+1

请参阅http://stackoverflow.com/questions/6165889/database-is-locked – 2013-03-09 17:45:31

回答

8

它看起来像您的服务器正在锁定数据库,以便测试运行后无法清理。

当您在没有JavaScript的情况下使用Capybara时,测试和服务器都运行在一个进程和线程中。这意味着他们可以共享相同的数据库连接和事务。这意味着RSpec可以使用简单的数据库事务在测试结束时回滚更改,以及为什么在测试和服务器之间看不到任何锁争用。

当您使用:js => true运行时,情况会有所不同,服务器会在单独的线程或进程中启动到您的测试,因此它们将分别使用单独的数据库连接和事务。这意味着RSpec默认使用的数据库事务策略无法进行清理。它也会导致你的情况发生锁定错误。

水豚readme谈论这个问题,并建议database_cleaner宝石作为替代在这种情况下。您需要将数据库清理程序配置为使用截断策略而不是事务

+0

请参阅http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/上的详细说明 – John 2014-10-20 21:46:14