Rails Rspec - ActiveRecord :: StatementInvalid:PG :: InFailedSqlTransaction:

时间:2017-09-27 06:44:11

标签: ruby-on-rails ruby postgresql activerecord rspec

我有这个控制器方法

def dashboard
 method1
 method2
 method3
 ..
end

development环境中一切正常 但在test环境中, 我在前几种方法后得到了这个错误。

我在我用来获取错误的行上方使用binding.pry进行了检查,

我无法运行任何查询eg: Account.first 但同一Account.first适用于dev环境

我在test环境中运行时出错:

ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR:  current transaction is aborted, commands ignored until end of transaction block
: SELECT  "accounts".* FROM "accounts"  ORDER BY "accounts"."id" ASC LIMIT 1
from /home/qwinix/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:596:in `async_exec'

请注意以下

  • 在其他控制器和各自的规范中找不到错误。
  • 其他分支机构的同一控制器中没有错误
  • 我向method1添加了一些代码,这些代码在两个环境中执行得很好。我在method3之后收到了这些错误,我没有碰过。

PS:我确实谷歌和搜索stackoverflow问题,没有帮助

编辑:当我移动method1结束时,我没有收到任何错误,请解释我这种行为。

1 个答案:

答案 0 :(得分:0)

您是否尝试重置测试数据库?

fun onBtnClick() {
    val handler = Handler()
    handler.postDelayed({ showToast() }, 3000)
}

fun showToast(){
    Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}

或适用于5岁以上的Rails版本

bundle exec rails db:drop RAILS_ENV=test
bundle exec rails db:create RAILS_ENV=test
bundle exec rails db:schema:load RAILS_ENV=test

或更短:

bundle exec rake db:reset RAILS_ENV = test