我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Rspec中怎么清理陈旧数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Rspec中怎么清理陈旧数据

这篇文章将为大家详细讲解有关Rspec中怎么清理陈旧数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Rails Rspec后台默认事务

如果使用rails-rspec,默认情况下,spec/rails_helper.rb中会启用以下配置:

RSpec.configuredo |config|                   config.use_transactional_fixtures=true                 end

这意味着“在事务内运行每个示例”,即在示例结束时,所有数据库的变更都将回滚。

如何让“事务装置”实现“在事务内运行每个示例”?

在深入研究Rails  4代码库,了解了它在后台的实际工作之后,我发现了以下内容。setup_fixtures函数中,Rails为每个数据库连接调用begin_transaction。

Rspec中怎么清理陈旧数据
Rails 4的setup_fixtures

在teardown_fixtures函数中,Rails为每个数据库连接调用rollback_transaction。

Rspec中怎么清理陈旧数据
Rails 4的teardown_fixtures

这也意味着,如果在应用程序中使用多个数据库,那么应用程序将为所有数据库创建事务。

在示例之外创建的数据库记录将不会回滚

由于数据库事务围绕着每个示例,因此在示例范围之外创建的任何数据库记录都不会回滚,也就是说,在before(:all)、before(:context)或before(:suite)代码块中创建的任何数据库记录都不会回滚。

这可能导致示例组之间而不是同一组的示例之间的竞态条件,因此处理hook问题时要十分小心。

context'context 1'do           before(:context) do             create(:user) # WON'T BE ROLLED-BACK           end                beforedo             create(:user) # will be rolled-back           end                # ...         end              context'context 2'do           before(:context) do             create(:user) # WON'T BE ROLLED-BACK           end                # ...         end              # BY NOW, THERE ARE 2 USER RECORDS COMMITED TO DATABASE

手动设置数据库事务

你还可以选择使用hook手动设置数据库事务。

RSpec.configuredo |config|                   config.use_transactional_fixtures=false# DISABLE DEFAULT TRANSACTIONS                 end              before(:example) do                   ActiveRecord::Base.connection.begin_transaction                 end              after(:example) do                   conn =ActiveRecord::Base.connection                   conn.rollback_transactionif conn.transaction_open?                 end              # OR              around(:example) do |example|                   ActiveRecord::Base.transactiondo                     example.run                            # ROLLBACK after the example finishes.                     # This exception is silently swallowed by ActiveRecord.                     raiseActiveRecord::Rollback                   end                 end

[Rails 4 & Rails 5.0.x]数据库事务是按线程执行的

Rspec中怎么清理陈旧数据
Rails 4中的数据库连接

由上可知,ActiveRecord数据库连接是按线程执行的。因此,Rails通过use_transactional_fixtures管理的默认数据库事务只在主线程中可用。

从技术上说,根据事务回滚策略,一个线程的数据库记录将独立于其他线程。需要访问其他线程中的某个线程的数据库数据时请注意这一点,例如Selenium。

[Rails 4 & Rails 5.0.x]JavaScript驱动程序(Selenium)和Capybara  Webkit的验收测试问题。

Selenium在另一个线程上运行,因此它不能与运行RSpec的主线程共享事务。为了让客户端应用程序访问数据库中的数据,RSpec需要将改动提交。这类情况下可以允许提交数据,然后手动清理数据。

[Rails 4 & Rails 5.0.x]DatabaseCleaner——回滚策略

要解决上述问题,首先需要禁用Rails派生的事务,将config.use_transactional_fixtures设置为false,或干脆删除它。DatabaseCleaner是一个gem,它提供了清理数据库的高级策略,例如删节、事务处理或删除。

下面是利用DatabaseCleaner处理上述JS驱动程序问题的著名gist:

Rspec中怎么清理陈旧数据

[从Rails 5.1起]数据库事务在测试线程之间共享

线程之间的共享数据库事务由Rails团队的Eileen完成,并作为Rails 5.1的一部分内容发布。

Rspec中怎么清理陈旧数据
加入了lock_thread
Rspec中怎么清理陈旧数据
为测试启用了lock_thread

关于Rspec中怎么清理陈旧数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Rspec中怎么清理陈旧数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sqlserver怎么清除旧数据

要清除旧数据,可以使用DELETE语句或者TRUNCATE TABLE语句。1. 使用DELETE语句:```DELETE FROM 表名 WHERE 条件;```例如,要删除一个表中创建日期早于某个特定日期的记录:```DELETE FR
2023-09-04

Python中怎么清理文本数据

Python中怎么清理文本数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.文本小写在我们开始处理文本之前,最好先将所有字符都小写。我们这样做的原因是为了避
2023-06-16

怎么清理Docker数据

这篇文章主要介绍了怎么清理Docker数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Docker 不会对你的系统进行任何配置更改……但是它会占用大量的磁盘空间。(使用 D
2023-06-20

C++中普通旧数据怎么使用

本篇内容主要讲解“C++中普通旧数据怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中普通旧数据怎么使用”吧!一、什么是普通旧数据普通旧数据就是内存中的连续字节序列,是能够被“仅当作
2023-07-05

云服务器清理缓存数据怎么清理

云服务器通常会存储大量数据,因此需要定期清理缓存数据以确保数据的可用性和安全性。以下是一个简单的清理过程示例:检查日志和警告信息:确保日志和警告信息已被正确处理,以防止数据损坏或意外。删除不需要的文件和文件夹:删除不需要的数据以释放可用空间并保持系统的清洁。重新安装或升级应用程序:如果可能,请重新安装和升级应用程序以避免不必要的错误并提高性能。检查服务器健康状况:及时监视服务器的健康状
2023-10-26

win11怎么清理用户数据

要清理Win11上的用户数据,可以按照以下步骤进行操作:1. 打开"设置":点击任务栏上的"开始"按钮,然后点击"设置"图标(齿轮形状)。2. 进入"系统":在"设置"窗口中,点击"系统"选项。3. 选择"存储":在"系统"窗口中,点击左侧
2023-08-22

MySQL线上数据库怎么清理数据

这篇文章将为大家详细讲解有关MySQL线上数据库怎么清理数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。01 场景分析 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分
2023-06-14

云服务器清理缓存数据怎么清理掉

云服务器通常会存储大量数据,因此清理缓存数据是非常重要的,以下是一些操作方法:首先,您需要确认缓存数据的格式是否符合您的要求,比如是否包含过期的数据和未命名的数据。如果您不知道该如何操作,可以向云服务器管理员寻求帮助。使用工具清理缓存数据。您可以使用各种缓存清理工具,例如SpeedThru和GoogleCloudMemoryCache等。这些工具通常具有一些可选的清理选项,以帮助您清除大多数缓存数据。在进行清理之前,需要备份数据。...
2023-10-27

云服务器清理缓存数据怎么清理啊

云服务器通常会存储大量数据,因此需要定期清理缓存数据以确保数据的正确性和完整性。以下是可能的清理方法:删除数据:首先要删除一些缓存数据,例如:已删除或过期的数据、不再需要的文件等。这些数据可以直接从服务器上删除,不需要手动重新上传到数据库中。整理缓存池:整理缓存池是一种常见的清理方法。将服务器上的缓存数据整理到一个新的空间中,以确保所有缓存数据的可见性和正确性。重新添加缓存:如果您的服务器有多个缓存,可以使...
2023-10-27

云服务器清空数据盘怎么清理

如果您想要将云服务器清空数据盘,以下是一个简单的步骤:在本地磁盘或数据库中创建文件夹或文件,其中包含您数据和文件夹的副本。打开云服务器管理面板(如图1),选择“更改账户”选项。在弹出对话框中,确认您的账户已经成功添加至云服务器账户中。在弹出对话框中,选择“清空数据盘”选项。在弹出对话框中选择要清空的文件夹或文件,然后点击“确认”。清空完成后,您的数据将会被清空。请注意,在清空数
2023-10-26

云服务器清理缓存数据怎么清理掉了

清理缓存数据可以采用多种方式,其中最常见的方法是手动清理缓存数据。这种方法可以通过命令行执行,具有高效、稳定、安全等优点。但是,这种方法需要用户具备一定的计算机操作技能和清理缓存数据的经验,同时需要耗费一定的时间和精力。另一种常见的清理缓存数据的方法是使用第三方清理工具。这些清理工具可以自动清理缓存数据,同时还提供了一
2023-10-27

sql数据库怎么清理缓存

清理 sql 数据库缓存的方法取决于所使用的 dbms:microsoft sql server:使用 dbcc dropcleanbuffers 命令或关闭和重新打开数据库。mysql:使用 flush 命令或更改 innodb 缓冲池状
sql数据库怎么清理缓存
2024-06-03

MySQL中怎么清空表数据

这篇文章主要介绍了MySQL中怎么清空表数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中怎么清空表数据文章都会有所收获,下面我们一起来看看吧。MySQL清空表数据清空表数据一共有三种方式1 、tr
2023-07-05

怎么清理云服务器数据

云服务器数据通常存储在多个数据存储服务器上,例如AWS和GoogleCloud。以下是一些清理AWS云服务器数据的步骤:关闭AWS数据存储引擎:使用AWS的SQL注入或其他恶意软件扫描工具可以扫描出一些存储在AWS数据存储引擎中的数据。关闭所有数据存储引擎,以避免扫描到敏感信息。备份数据:将数据存储在本地或其他远程服务器上进行备份,以便在发生问题时可以快速恢复数据。建议将数据存储在本地的硬盘或CD盘上,并使用AW...
2023-10-27

db2数据库满了怎么清理

当DB2数据库满了,可以尝试以下方法进行清理:删除不必要的数据:检查数据库中是否有不必要的数据或者过期的数据,可以通过删除这些数据来释放空间。压缩表空间:通过压缩表空间来优化数据库存储空间的利用,可以减少数据库的空间占用。重新组织表空间
db2数据库满了怎么清理
2024-04-09

怎么清理sql数据库空间

要清理SQL数据库空间,可以采取以下几个步骤:1. 删除不再需要的数据:首先,检查数据库中是否有不再需要的数据,比如过期的日志、临时表、不再使用的备份等。可以使用DELETE或者TRUNCATE语句来删除这些数据。2. 压缩数据库文件:可以
2023-09-04

编程热搜

目录