首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不丢弃DB内容的情况下运行Rails集成测试?

在不丢弃数据库内容的情况下运行 Rails 集成测试,可以通过以下方法实现:

  1. 使用 DatabaseCleaner gem 清理数据库

DatabaseCleaner 是一个常用的 Ruby gem,用于在 Rails 测试中清理数据库。它可以在测试运行之前设置不同的策略,以保留数据库中的数据。

首先,在 Gemfile 中添加 DatabaseCleaner gem:

代码语言:ruby
复制
group :test do
  gem 'database_cleaner'
end

然后,在 spec/rails_helper.rbtest/test_helper.rb 中配置 DatabaseCleaner

代码语言:ruby
复制
RSpec.configure do |config|
  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
end

这样,在运行集成测试时,DatabaseCleaner 会在每个测试用例之前开始一个新的事务,并在测试用例结束后回滚事务,从而保留数据库中的数据。

  1. 使用 FactoryBotFactoryGirl gem 创建测试数据

FactoryBotFactoryGirl 是两个常用的 Ruby gem,用于在 Rails 测试中生成测试数据。它们可以帮助您快速地创建和管理测试数据,从而避免在测试过程中对实际数据库造成影响。

首先,在 Gemfile 中添加 FactoryBot gem:

代码语言:ruby
复制
group :test do
  gem 'factory_bot_rails'
end

然后,在 spec/factoriestest/factories 目录下创建测试数据工厂:

代码语言:ruby
复制
FactoryBot.define do
  factory :user do
    name { "John Doe" }
    email { "john.doe@example.com" }
    password { "password" }
  end
end

在测试用例中,使用 FactoryBot.create 方法创建测试数据:

代码语言:ruby
复制
user = FactoryBot.create(:user)

这样,在运行集成测试时,FactoryBot 会在测试数据库中创建测试数据,并在测试用例结束后自动清理数据库,从而保留实际数据库中的数据。

总之,通过使用 DatabaseCleaner gem 和 FactoryBot gem,可以在不丢弃数据库内容的情况下运行 Rails 集成测试。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在CentOS 6.5上使用 Nginx+Passenger 部署Railes应用程序

介绍 对于某个计算机编程领域新手来说,挑战永远不会结束。本文主题是Rails,以及如何在线获取基于Ruby On Rail Web应用程序 - 这是最简单,最快捷方式。...请记住: “处理”连接在技术上意味着不要丢弃它们并能够用某些东西为它们提供服务。您仍然需要您应用程序和数据库正常运行才能让Nginx为客户端提供非错误消息响应。...要测试Passenger下载和设置是否正确,请尝试运行passenger。...db:migrate 要测试应用程序是否设置正确并且一切正常,请输入app目录并用rails s运行一个简单服务器: # Enter the application directory cd /...运行以下命令以使用新应用程序配置重新加载Nginx: /etc/init.d/nginx restart 要检查Nginx状态,您可以使用: /etc/init.d/nginx status 为了测试应用程序

5K20

何在Ubuntu 14.04上使用MySQL和Ruby on Rails应用程序

介绍 Ruby on Rails使用sqlite3作为其默认数据库,在许多情况下效果很好,但可能不适合您应用程序。...如果您应用程序需要客户端/服务器SQL数据库(PostgreSQL或MySQL)可伸缩性,集中化和控制(或任何其他功能),则需要执行一些额外步骤才能启动并运行它。...本教程将向您展示如何在Ubuntu 14.04服务器上设置开发Ruby on Rails环境,以允许您应用程序使用MySQL数据库。首先,我们将介绍如何安装MySQL和MySQL适配器gem。...您可以通过输入以下内容来执 sudo mysql_install_db 之后,我们想要运行一个简单安全脚本,它将删除一些危险默认值并锁定对我们数据库系统访问。...测试配置 测试应用程序是否能够使用MySQL数据库最简单方法是尝试运行它。

4.9K00
  • 自建 Gitlab (邮箱配置、拆分 PostgreSQL、Redis) + 随想

    分离缓存与数据库 我不知道 gitlab 为什么不进一步提供纯净版镜像,而且官方推荐 omnibus 安装方式,反正我至少不喜欢把数据库和缓存都集成到一个镜像里面,预期是构建一个子镜像并移除 nginx...['db_adapter'] = 'postgresql' gitlab_rails['db_encoding'] = 'utf8' gitlab_rails['db_host'] = 'postgresql...' gitlab_rails['db_port'] = 5432 gitlab_rails['db_username'] = 'postgres' gitlab_rails['db_password']...、负载均衡呀、网关呀等都是属于外围基础设施了,不会和应用挂钩,这种情况下更简单,因为,完全不需要任何配置。...现在是不是舒服多了...以上一番测试差不多花了一天时间,就为了这么个小玩意儿,但无论怎么样,最后有结果了还是能稍感欣慰

    2.3K60

    用selenium自动化验收测试

    持续集成 持续集成目标是自动化构建和测试过程,以便每天自动运行一次或多次这些过程,而不是每个月手动地运行一次。...下面是主要两大好处: 通过编写模仿用户操作 Selenium 测试脚本,可以从终端用户角度来测试应用程序。 通过在不同浏览器中运行测试,更容易发现浏览器兼容性。...目前,已经有人在致力于将 Selenium 集成到 Ruby on Rails 中,但是在我撰写本文之际,这个集成版本还没有被发布。...回页首 现实中需求 在接下来两节(现实中需求 和 现实中用例)中,我将描述如何在现实场景中使用 Selenium,并针对用 Ruby on Rails 和一点儿 Ajax 技术编写一个简单股票报价查看器应用程序编写...然后转入应用程序被解压到那个目录。为了启动应用程序,运行 ruby script/server。应该看到 Rails 成功启动了, 图 1 所示。 图 1.

    6.2K30

    Ansible和Docker作用和用法

    && cd /terrabox && export RAILS_ENV=production && rake db:create db:migrate && bundle exec unicorn -...Docker 容器内运行 Rails 应用 没有本地 Docker 镜像,从零开始部署一个中级规模 Rails 应用大概需要100个 gems,进行100次整体测试,在使用2个核心实例和2GB内存情况下...需要指出一点是,我应用上运行着一套完全测试套件,跑完测试需要花费额外1分钟时间。...尽管是无意,Docker 可以变成一套简单持续集成环境,当测试失败后,Docker 会把“test-only”这个容器保留下来,用于分析出错原因。...能获得一个免费持续集成环境,可以查看不同版本应用之间区别,不会影响到同主机上已经在运行应用,这些功能强大到难以置信,让我感到很兴奋。在文章最后,我只希望你能感受到我兴奋!

    2.1K20

    在 Ubuntu 上安装 Discourse 开发环境

    测试环境  有关在 Ubuntu 低于 20.04版本上安装 Discourse 测试环境 根据我们进行测试经验来看,Ubuntu 22 版本中可能有无法编译和包找不到情况,我们还只在 20.04...,或者你希望安装所有的软件的话,请参考 script 中内容,然后选择你希望当前安装软件。...rake db:migrate RAILS_ENV=test bundle exec rake db:create db:migrate 如果在运行时候出现错误,请仓库: Discourse 开发环境安装运行...bundle exec rake db:create 错误 中内容。...尝试运行下面的命令: bundle exec rake autospec 你项目应该会通过所有的测试。 这个测试非常耗时,可以不做这个,要不然估计几个小时就出去了。

    2.6K50

    何在Ubuntu 14.04上使用Unicorn和Nginx部署Rails应用程序

    此外,本教程未介绍如何设置开发或测试环境。如果您需要帮助,请参考腾讯云+社区中有关PostgreSQL with Rails教程中示例进行操作。...创建Rails应用程序 理想情况下,您已经拥有了要部署Rails应用程序。如果是这种情况,您可以跳过本节,并在跟随时进行适当替换。...(用你应用程序名称替换突出显示“APPNAME”,用生产数据库用户密码替换“prod_db_pass”): APPNAME_DATABASE_PASSWORD=prod_db_pass 保存并退出。...创建生产数据库 既然您应用程序已配置为可以与PostgreSQL数据库通信,那么让我们创建生产数据库: RAILS_ENV=production rake db:create 生成控制器 如果您跟随示例...为此,请运行以下命令: RAILS_ENV=production rake assets:precompile 测试应用 要测试应用程序是否有效,您可以运行生产环境,并将其绑定到服务器公共IP地址

    4.3K00

    如何部署Mina:入门教程

    生活在没有Rails世界中:Mina可以做到以上所有,甚至更多,并且对Rails没有任何严重依赖。使用Mina,您几乎可以部署所有内容。...在官方CentOS存储库中找不到一些方便库和软件包(例如libyaml-devel,nginx等)。 为简化操作而处理手动安装,我们将为YUM包管理器添加EPEL软件存储库以供使用。...:db_migrate' invoke :'rails:assets_precompile' ​ to :launch do queue "touch #{deploy_to...}/tmp/restart.txt" end end end 运行任务和子任务 您可以使用Mina定义和链接任务,这在许多情况下都非常方便。...应用程序 关于Rails应用程序部署示例,请参考:“如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序”。

    4.5K40

    开发项目管理工具redmine 原

    ; 自定义字段问题,时间项,项目和用户; SCM in集成 (SVN, CVS, Git, Mercurial, Bazaar and Darcs) 多个 LDAP认证支持; 用户自注册支持; 多语言支持...基于上面的多种特性,在项目管理工作中,任务分配、任务跟踪、项目权限管理等等带来很大便捷性,使得工作进度、质量更加可控。...更重要一点是日常工作中所有工作内容申请和交接都通过Redmine和email来操作,这样所有工作开展都有据可依,也符合等保3考核要求。...即, 新版本Redmine启动后默认监听localhost,如果要通过外网访问,需要在启动时指定其监听ip。如果指定,需要在本机配置代理(nginx/httpd)。...proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # 在浏览器访问192.168.228.130 (注意,在测试环境使用该方法测试前提是保证该虚拟主机为当前

    10.1K40

    持续部署Microservices实践和准则

    2 使用Docker Compose运行测试 在整个持续部署流水线中,我们需要在持续集成服务器上部署服务、运行单元测试集成测试Docker Compose为我们提供了很好解决方案。...在服务需要访问数据库时,我们可以通过Docker Compose将服务Image和数据库Image组合在一起,然后使用Docker Compose在持续集成服务器上进行部署并运行测试。...service links: - db environment: - RAILS_ENV=test 采用Docker Compose运行单元测试集成测试: docker-compose...在Microservices场景下,本地很难搭建一整套集成环境,通常测试环境具有完整集成环境,在部署到测试环境之后,测试人员(QA)会在测试环境上进行测试。...“本地测试成功,但是持续集成失败”场景。

    1.5K40

    不是 Ruby,而是你数据库

    做好这种权衡是值得。通常情况下,开发迅速、成本低廉、发布迅速,这些都是值得为应用程序投入额外资源(服务器、硬件、SAAS)以保持性能可接受。 虽然并非始终如此,但时常亦是如此。...虽然有些 Ruby 项目不使用 Rails,但大部分生产中运行 Ruby 代码都是基于 Rails 开发。...在对整个 Rails 进行全面基准测试之前,我们先来审视一下 Rails ORM:ActiveRecord。...同样地,由于查询操作非常简单,涉及复杂内容,因此在数据库中所花费时间非常有限。...[5] 具有讽刺意味是,在这种非 http、非 rails 环境中,性能问题变得不那么明确了,然而在这些情况下,人们通常会因为 ruby 性能问题而将其作为选项。

    13630

    何在Ubuntu 14.04上使用Puma和Nginx部署Rails应用程序

    Puma是一个应用服务器,Passenger或Unicorn,它使您Rails应用程序能够同时处理请求。...创建Rails应用程序 理想情况下,您已经拥有了要部署Rails应用程序。如果是这种情况,您可以跳过本节,并在跟随时进行适当替换。...变量(用你应用程序名称替换突出显示“APPNAME”,用生产数据库用户密码替换“prod_db_pass”): APPNAME_DATABASE_PASSWORD=prod_db_pass 保存并退出...创建生产数据库 既然您应用程序已配置为与PostgreSQL数据库通信,那么让我们创建生产数据库: RAILS_ENV=production rake db:create 生成控制器 如果您跟随示例,...=production rake db:migrate 您还应该预编译资产: RAILS_ENV=production rake assets:precompile 要测试应用程序是否有效,您可以运行生产环境

    5.4K10

    何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序

    介绍 在部署基于RailsWeb应用程序时,简单设计应用程序服务器可以在几分钟内启动并运行。...在本文中,我们选择应用服务器是Unicorn。Unicorn是一个卓越应用服务器,它包含你Rails应用程序来处理传入请求,最好是在它们被前端HTTP服务器(Nginx)过滤和发送之后。...=production rake db:migrate # Create a directory to hold the PID files mkdir pids 要测试应用程序是否设置正确并且一切正常...注意:要使用Unicorn简单地测试应用程序,您可以在应用程序目录中运行unicorn_rails。 Nginx 接下来,我们需要告诉Nginx如何与Unicorn交流。...nano /etc/nginx/conf.d/default.conf 将文件内容替换为下面的文件内容,再次修改必要地方以满足您需要: upstream app { # Path to Unicorn

    4.1K20

    GitLab 14 轻量化运行方案

    但如果你希望拥有类似 GitHub 项目管理体验,并有私有化部署要求,GitLab 会是不二之选。 为了方便测试安装,我们使用上篇中提到方式来快速初始化容器环境。...因为剥离了各种比较重服务,经过测试,在数小时运行后,程序资源消耗依然非常稳定。 此时 GitLab 保留功能有:代码管理、项目管理、Wiki 文档、在线 IDE,各种集成能力。...至于 Gitaly ,实测之后,建议进行调整,一来节约资源非常非常有限,二来 Gitaly 运行数量如果被过分限制会直接影响使用体验,详见下文。...如果我们想将界面中内容隐藏,只需要将 def configure_menu_items 函数中内容清空,替换成 false 即可,: # frozen_string_literal: true...推荐调整配置:Gitaly 前文提到推荐对 Gitaly 服务进行配置调整,因为这个服务对于环境变量获取和判断使用在逻辑上有一些小问题。

    2.9K40

    GitLab 14 轻量化运行方案

    但如果你希望拥有类似 GitHub 项目管理体验,并有私有化部署要求,GitLab 会是不二之选。 为了方便测试安装,我们使用上篇中提到方式来快速初始化容器环境。...因为剥离了各种比较重服务,经过测试,在数小时运行后,程序资源消耗依然非常稳定。 此时 GitLab 保留功能有:代码管理、项目管理、Wiki 文档、在线 IDE,各种集成能力。...至于 Gitaly ,实测之后,建议进行调整,一来节约资源非常非常有限,二来 Gitaly 运行数量如果被过分限制会直接影响使用体验,详见下文。...如果我们想将界面中内容隐藏,只需要将 def configure_menu_items 函数中内容清空,替换成 false 即可,: # frozen_string_literal: true...推荐调整配置:Gitaly 前文提到推荐对 Gitaly 服务进行配置调整,因为这个服务对于环境变量获取和判断使用在逻辑上有一些小问题。

    4.7K21

    使用spring提高rails开发效率

    rails开发者都有着这样类似的经历: pair写了一个测试 运行测试 等待 该我来编写产品代码 运行测试 等待 代码有bug 测试失败 修复测试 运行测试 等待 测试通过,yeah!...可是,我总觉得有点不爽快,原来是那么多等待,每运行一次测试,就需要等待十几秒甚至几十秒,每天我会运行上千次测试,这是多大浪费?...做为一个有追求程序员,我当然不愿意把宝贵工作时间浪费在这无谓等待中去 :-)。 ###现有方案 有追求程序员还是大多数,google之后才发现已经有人尝试解决这个问题,spork,zeus。...他们原理都是预先把rails环境启动起来,后面在运行测试,执行rake task时从这个启动好进程fork一个进程,在这个进程中执行操作。...: spring rspec 当第一次使用spring运行测试,rake taks, db migration时,spring会自动在后台load rails 环境,因此执行速度也很慢,但是当再次执行时

    3.5K60
    领券