问题标签 [database-cleaner]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 使用 RSPEC 测试时突然莫名其妙的活动记录连接超时
这是一个我几乎一无所知的领域,所以提前道歉。我有一套超过 800 个 rspec 测试。在运行整个集合或特定测试文件时突然莫名其妙地,在其中几个之后(比如 20 个左右,尽管它从来不是完全相同的数字),每个测试都开始失败并出现相同的错误:
在典型的运行中,我将在 20 次左右的请求测试后开始收到这些错误,其余 780 多次测试都失败,并出现上述完全相同的错误。我尝试回到之前完美测试过的 git commit 和分支。没有运气——仍然有 780 多次失败。还完全删除了重新创建的测试数据库。也没有运气。
我已经阅读了很多关于连接池等的线程,但恐怕我不知道如何诊断甚至发生了什么。以下是我现在所知道的事实:
- 使用 Postgresql
- 据我所知,开发环境运行良好
- 在一切正常和现在之间,我没有对我知道的环境进行任何更改/升级。甚至没有任何数据库迁移。仅更改模型、视图和控制器代码。正如我所提到的,回到以前的提交并不能解决任何问题。
config.use_transactional_fixtures = false
在 spec_helper.rb 中,因为我正在通过 Selenium 测试 ajax 功能。- 但是,无论 Selenium 是否用于特定的一组测试,测试都会失败。即使我只运行不使用 Selenium 的测试,在 20 次左右的测试后仍然会出现故障。
我使用的是具有以下配置的 Database Cleaner,而不是事务性装置:
有什么想法吗?更具体地说,我应该在哪里寻找问题所在的任何想法?我几乎没有处理这种类型的 ActiveRecord 问题的经验,我什至不知道从哪里开始。
更新虽然我仍然不知道为什么会发生这种情况,但我确实知道具体是什么代码导致了它。在最近的一次提交中,我在新线程中添加了发送通知电子邮件。这是代码:
我在应用程序的许多其他地方都使用了这种精确的模式(使用不同的电子邮件),所有这些都经过测试。出于某种原因,这个特定的原因导致数据库超时错误。欢迎任何关于为什么会发生这种情况的想法。
更新 由于我不处于了解线程在这种情况下如何工作的阶段,因此我不知道问题的确切来源,除此之外:根据我所阅读的内容,很难以编程方式控制执行以这种方式创建的线程。但是,我找到了解决方案。而不是上面的块,我已将块更改为以下内容:
所以我基本上运行不同的代码进行测试而不是开发 - 没有新的测试线程。我假设这是一个坏主意,但是直到我能理解真正的问题在哪里(无论出于何种原因,测试本身不会失败,或者仍然使用不强制测试失败的线程的代码),这个是我需要去的。
最终更新
我已经放弃了Thread.new
异步发送电子邮件的方法,而是实现了 Sidekiq。这是一个多一点的工作,但它运作良好并且测试良好......
ruby-on-rails-4 - Rspec 不将记录保存到数据库
我正在为我的 rails_4 应用程序编写测试。我使用 rspec、selenium、capybara、database_cleaner、site_prism 和 factory girl。
我在我的应用程序中使用了 2 个数据库,在我的测试中,我需要检查第一个数据库中的记录是否与第二个数据库中的记录相同......
但是当我运行我的测试时:
- database_cleaner 不会在每次“它”之后清理我的数据库
- 当我使用 selenium 发布表单以保存类别时,我会在类别/索引和类别/:id/show 中看到此类别。但是
Category.count returns me 0
!!!
请帮助我正确设置 rspec 环境:
我的 spec_helper.rb:
我的支持/capybara.rb:
我的支持/mobile_market_pages.rb:
我的支持/hooks.rb:
规格示例:
典型错误:
我的工厂:
请帮帮我!
ruby-on-rails - 使用 RSpec 测试控制器时数据库未清理
在使用 RSpec 测试我的模型时,我使用以下代码来清理我的数据库:
我所有的模型测试都通过了,但是当我测试我的控制器时,它们似乎使用了与我的模型操作相同的数据集,从而使我的测试出错。
我可以通过使用以下代码来通过我的控制器测试:
但是,这会导致我的模型测试失败。关于如何在不破坏一组测试或另一组测试的情况下组合这些块的任何建议?
mysql - Rspec 和 Capybara:将结果保存到数据库?
我对 RSpec 还很陌生,一直在尝试为我的网站创建一些测试,用户可以在这些测试上向网站发布预订,然后将其保存到我们的数据库中。我一直在尝试使用 Rspec 和 Capybara 来模拟用户向网站发布预订。我们有一个现有的测试数据库,并且在 Rspec 测试结束时希望将新保留写入数据库,而不是在 Rspec 测试结束时删除。
当我们运行代码时会发生两件事之一:要么它“工作”,但在数据库中找不到新的预留,要么我们得到这个错误:
为什么会发生这种情况?我意识到 Capybara 通常并不意味着对数据库进行永久性更改。您推荐其他程序/宝石吗?
我目前有config.use_transactional_fixtures = false
,并且还根据一些网站的推荐添加了以下内容:class ActiveRecord::Base mattr_accessor :shared_connection @@shared_connection = nil
重申一下,我确实希望 Capybara 写入我的数据库(我们使用 SQL)。我能做些什么不同的事情?它与数据库清理器有关吗?
ruby-on-rails - 对象被创建。(RoR,数据库清洁工,工厂女孩)
我是Rails的初学者,请帮助我,我不明白问题是什么。似乎之前写了其他东西(:每个)......我怎样才能在 test_spac.rb 中编写一个没有创建 Card 对象的测试。before(:each) 方法不适用于此测试。
这是工作:
test_spec.rb:
rails_helper.rb:
这是行不通的:
test_spec.rb:
rails_helper.rb:
ruby-on-rails - 我应该如何处理我的控制器和视图所依赖的 Rails 模型记录?
我有一个处理运动队的 Rails 应用程序。有一个模型,Club
包含所有球队,它们与Match
es 等有关。该应用程序以其中一个俱乐部为中心,并依赖于该记录的存在。我有一个定义主俱乐部的应用程序辅助方法,本质上是:
然后在控制器逻辑(可以做某些main_club
你不能为其他人做的事情)和视图(显示有关即将到来的比赛的某些关键信息等)中引用它。
这让我感觉很乱。依赖“软”数据库记录的硬代码?但我确实需要俱乐部成为记录,以允许其所有关系。
我只是保持原样,但它弄乱了 RSpec。即使在 中运行Rails.application.load_seed
,config.before(:suite)
我也经常遇到规格失败,因为它无法调用.matches
,例如 on nil
。
这种事情有既定的做法吗?我该怎么办?
编辑:种子文件包括所有当前的俱乐部(包括主俱乐部),有可能在管理界面/控制器中添加更多。RSpec 问题可能来自 DatabaseCleaner 做错了什么,但是 a)我不确定那会是什么,b)我对依赖“软”数据库记录的硬代码的担忧仍然存在,无论 RSpec 是什么。
ruby-on-rails - Selenium 与 Capybara 未通过测试
我的 Selenium 测试有问题,看起来测试数据没有添加到正确的环境中,或者 Selenium 试图从错误的环境中读取。
下面的测试没有通过,:js => true
但它失败了
测试失败,因为用户没有登录,因此没有到达“/home”。我添加了打印输出以查看用户是否真的被添加到数据库中并且它是......
但是,当我将另一个打印输出添加到我的login_controller
控制台看起来像
因此,由于某种原因,在进行身份验证时,在测试中添加的用户不在数据库中,这让我认为 Selenium 正在寻找不同的环境,即开发时应该查看测试?
如果有帮助,这里是我的一些spec_helper
带有 database_cleaner 配置的文件
关于如何解决这个问题的任何想法?我不知道 Selenium 是否正在查看错误的环境或我的 database_cleaner 配置错误
ruby-on-rails - 使用工厂女孩协会的 Rspec 功能规范
我正在尝试为需要编辑其帐户模型设置的用户测试功能规范。我是测试新手,所以不确定我的问题是由于我设置工厂女孩协会的方式还是我的数据库清理器配置有问题。
我的 spec_helper.rb:
我的规范/功能/account_spec.rb
如果我只运行一个规范,我会通过测试:
但是当我运行整个测试套件时,我得到了错误:
ruby-on-rails - Minitest 规范使用相同的数据库事务进行一组测试
我将如何在 minitest 中做相当于 rspec before(:all) 的操作。我有一组测试需要永远运行,但如果我不必在每次测试之前设置数据库,它会非常快。
我想做的是:
ruby-on-rails-4 - RSpec 数据库清理器在测试之间没有发生
我有一系列相当复杂的测试,以更简单的形式复制如下:
在配置中我需要关闭,use_transactional_fixtures
因为这些是基于 javascript 的测试,而事务性装置对我不起作用。所以我尝试像这样实现数据库清理器(使用 Sucker Punch gem 指令https://github.com/brandonhilkert/sucker_punch,因为我最终还需要测试 gem):
问题是这无济于事:
- 对于应该成功的信用卡(每个循环),第一次通过,但随后都失败,因为
Record.count
不断构建 - 对于应该失败的信用卡,它会失败,因为在运行测试时,
Records
测试数据库中已经有
基本上,它通过的唯一方法是在 a 中强制清洁before(:all)
(技巧before
也没有)after
如何正确设置数据库清理器?还是我应该这样做before(:all)
?