gpt4 book ai didi

ruby-on-rails - 测试速度 : ActiveRecord use_transactional_fixtures vs. DatabaseCleaner.strategy = :transaction

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:41 24 4
gpt4 key购买 nike

从来源(database_cleaneractive_record)来看,它们应该同样快。但是有人声称使用 database_cleaner 的事务策略会降低 Controller 和模型规范的速度(for example)。我手头没有用于基准测试的大型测试套件。任何人有任何见解或比较两者?

最佳答案

我花了一点时间在广泛使用 ActiveRecord 固定装置的中型代码库上比较两者。当我将其切换为使用 DatabaseCleaner 而不是 use_transactional_fixtures 时,模型规范开始花费大约两倍的时间。

在进行了与您相同的比较之后,我意识到 use_transactional_fixtures 控制着两件事:

  1. 每个规范是否包含在交易中
  2. 在进程中夹具数据由 ActiveRecord 加载的位置
    • use_transactional_fixtures 为真时,夹具数据在第一次测试之前加载一次
    • 为false时,在每个spec之前加载fixture数据

DatabaseCleaner 的事务策略可以替代(1)。但缺点是您的套件会重复加载相同的夹具数据。

因此,如果您不使用 AR fixtures(或只使用一对),use_transactional_fixtures 和 DatabaseCleaner 的事务策略将具有相似的性能。但是,如果您使用大量 AR fixtures,关闭 use_transactional_fixtures 会对性能产生很大影响。

关于ruby-on-rails - 测试速度 : ActiveRecord use_transactional_fixtures vs. DatabaseCleaner.strategy = :transaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234454/

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