Capybara+webkitでのJSのテストでのmysqlデッドロックエラー

featureテストで、WebpayのCheckoutHelperをなかなかCapybaraでテストできなかったのでメモ。

Rails integration tests, RSpec, Capybara, and MySQL deadlocks

ということでmysqlでdeadlockが起こってしまってたみたい。

以下の記事で解決した。

Rails integration tests, RSpec, Capybara, and MySQL deadlocks - Dan Adams

As noted in this blog post, the issue is with RSpec’s use of transactions during testing. Before step 1, RSpec starts a database transaction which is open when we get to step 3. At this point the application blocks due to the transaction and bad things happen. Like the aforementioned post states, the answer is as simple as changing the configuration in spec_helper.rb to:

どうやらRSpecの他のtransactionが走ってたためにロックされてしまってたみたい。rails_helper.rbに以下を追加したら治りました。

config.use_transactional_fixtures = false