gpt4 book ai didi

ruby-on-rails - Rails Controller 测试 : Does database state change persist after success of test?

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:22 25 4
gpt4 key购买 nike

我正在使用 ActionController::TestCase(下面的代码)测试 BranchController 的创建方法。我通过调用 find_by_name 方法检查是否创建了对象(假设名称在这里是唯一的)。测试运行成功,但是当我检查 mysql 数据库中的相同记录时,它不存在。

    class Security::BranchControllerTest < ActionController::TestCase
test "the create" do
post(:create, :branch => {:name => "test branch", :details=> "test branch details"})

#replace find with where searching with all of fields
assert_not_nil Company::Branch.find_by_name("test branch")
end
end

最佳答案

如果您使用的是支持事务的数据库(现在大多数人都这样做),默认情况下,rails 测试会在运行每个测试之前设置一个保存点,并在结束时进行回滚。

这意味着插入确实发生了,但结果在测试之外是不可见的。

您应该在测试日志中看到保存点和回滚操作。

如果你想禁用这个,你可以添加

self.use_transactional_fixtures = false

在你的测试类中,或者通过添加类似的东西来为你的所有测试打补丁

class ActiveSupport::TestCase
self.use_transactional_fixtures = false
end

在你的 test_helper 类中。

虽然通常禁用它可能不是一个好主意,因为它是保持测试独立性的好方法。

关于ruby-on-rails - Rails Controller 测试 : Does database state change persist after success of test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280820/

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