gpt4 book ai didi

ruby-on-rails - 每次运行后测试数据库不会回滚

转载 作者:行者123 更新时间:2023-12-03 16:02:42 25 4
gpt4 key购买 nike

更新:已修复!!!!
正如我怀疑这是一个以某种方式搞砸的配置 - 随之而来的是大量的头发拉扯。出于某种原因,从 test_helper.rb 中删除了“require 'test_help'”,重新添加了它,现在所有的测试都在一个事务中。

这闻起来像是一个基本的配置问题,但我不知道是什么。 Rails 2.3.5,Ruby 1.8.7 补丁 173。我正在使用 Shoulda+factory girl 并进行了测试,以创建几个用户进行设置

class UserTest < ActiveSupport::TestCase 
use_transactional_fixtures = true
context "getting a user's email" do
setup do
... stubs ...
end

should "populate email field if not present" do
@user = Factory.create(:molly_perkins)
@user.get_email(@facebook_session)
assert_equal 'molly.perkins.test@gmail.com', @user.email
end

should "not populate email if already present" do
@user = Factory.create(:amanda_levy)
@user.get_email(@facebook_session)
assert_equal 'amandalevy06@gmail.com', @user.email
end
end
end

测试通过了,但问题是这些在运行后似乎没有被清除 - 查看 test.log,我看到事务提交了插入!是什么赋予了?
  # First test
User Create (0.3ms) INSERT INTO `users` ...
SQL (0.4ms) COMMIT
# Second test
SQL (0.1ms) BEGIN
User Create (0.3ms) INSERT INTO `users` ....
SQL (0.4ms) COMMIT
SQL (0.1ms) BEGIN
User Update (0.4ms) UPDATE `users` ....
SQL (0.4ms) COMMIT

为了解决这个问题,我只是使用了“Model.all.each(&:destroy)”的拆解块,但我不应该这样做,而且必须销毁我实例化的所有东西很慢/很麻烦。交易应该只是回滚...

测试数据库中的表是 InnoDB:
mysql> select engine from tables where table_name = 'users' and table_schema = 'voltron_test';
+--------+
| engine |
+--------+
| InnoDB |
+--------+

我正在使用事务性装置(来自 test_helper.rb):
class ActiveSupport::TestCase
use_transactional_fixtures = true
end

事务确实有效(从控制台访问测试数据库):
mysql> select * from users;
Empty set (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `users` ...
Query OK, 1 row affected (0.00 sec)
mysql> select * from users;
...
1 row in set (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from users;
Empty set (0.00 sec)

最佳答案

我从来没有用过 use_transaction_fixtures = true在测试用例中,但总是有:

class Test::Unit::TestCase
....
self.use_transactional_fixtures = true
....
end

在 Rails 附带的 test/test_helper.rb 文件中,从来没有遇到过这个问题。

关于ruby-on-rails - 每次运行后测试数据库不会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com