调试Rspec Postgres锁定

时间:2014-09-19 12:55:37

标签: ruby-on-rails postgresql rspec

我正在尝试测试一个使用gem devise_token_auth的应用程序,它几乎在每个请求上都包含几个额外的数据库读/写(以验证和更新用户访问令牌)。

除了测试包含几个额外的db读/写的控制器操作时,一切正常。在这些情况下,终端锁定,我被迫通过活动监视器杀死ruby进程。

有时我会收到如下错误消息:

ruby /Users/evan/.rvm/gems/ruby-2.1.1/bin/rspec spec/controllers/api/v1/messages_controller_spec.rb(1245,0x7fff792bf310) malloc: *** error for object 0x7ff15fb73c00: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

我不知道如何解释。我90%确定问题是由于这个gem以及它在每个请求中引起的额外数据库活动,因为当我恢复到之前的,不那么密集的身份验证时,所有问题都会消失。我还通过给予postgres一些额外的时间来处理违规测试,从而控制了事情:

after :each do
  sleep 2
end

这适用于除了一个之外的所有情况,这需要在expect之前超时,否则会抛出此错误:

Failure/Error: expect(@user1.received_messages.first.read?).to eq true
     ActiveRecord::StatementInvalid:
       PG::UnableToSend: another command is already in progress
       : SELECT  "messages".* FROM "messages"  WHERE "messages"."receiver_id" = $1  ORDER BY "messages"."id" ASC LIMIT 1

对我而言,再次指向数据库问题。

我还有什么其他方法可以追踪/控制这些错误吗?我应该研究哪种rspec设置?

0 个答案:

没有答案