我有一个模型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
答案 0 :(得分:0)
您显示的错误不是导致您出现问题的错误。
ERROR: current transaction is aborted, commands ignored until end of transaction block
这意味着您已经启动了一个事务,然后出现了错误。之后,您尝试的每个命令都会给出上述错误:在您回滚事务之前,它将不再接受任何命令。
向后查看日志文件,找到原始错误以诊断问题。如果你在应用程序日志文件中找到它,你可以在postgresql日志文件中找到它。
有时这种情况可能是由错误处理错误引起的。例如,如果你有一个启动事务的子例程,然后给出了一些命令但没有检查错误,你可能已经将数据库句柄保持在错误状态。
答案 1 :(得分:0)
正在运行rake db:migrate RAILS_ENV=test
解决了我的问题。数据库未在我的测试环境中创建。