运行Rails测试时语句无效错误

时间:2015-06-05 10:42:56

标签: ruby-on-rails postgresql unit-testing

我有一个模型friend_request并为此模型编写了单元测试。在运行测试时,我收到此错误:

ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR:  current transaction is aborted, commands ignored until end of transaction block                                       
:SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"friend_requests"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum

知道出了什么问题吗?

Edit :

我运行了这个查询:

 bundle exec ruby -I test test/models/friend_request_test.rb -n test_should_validate_name

2 个答案:

答案 0 :(得分:0)

您显示的错误不是导致您出现问题的错误。

ERROR:  current transaction is aborted, commands ignored until end of transaction block

这意味着您已经启动了一个事务,然后出现了错误。之后,您尝试的每个命令都会给出上述错误:在您回滚事务之前,它将不再接受任何命令。

向后查看日志文件,找到原始错误以诊断问题。如果你在应用程序日志文件中找到它,你可以在postgresql日志文件中找到它。

有时这种情况可能是由错误处理错误引起的。例如,如果你有一个启动事务的子例程,然后给出了一些命令但没有检查错误,你可能已经将数据库句柄保持在错误状态。

答案 1 :(得分:0)

正在运行rake db:migrate RAILS_ENV=test解决了我的问题。数据库未在我的测试环境中创建。