问题标签 [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.

0 投票
1 回答
1800 浏览

selenium - RSpec/Capybara/JS 测试单独通过,但一起运行时失败

我的问题似乎与以下内容非常相似:rspec 测试单独通过,但在与其他测试一起运行时失败- 但接受的答案是我已经在做的事情:我正在使用 avdi 的数据库清洁器设置(我已经尝试删除而不是像thinkbot在他们的吊带示例应用程序中使用的截断):http ://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

因此,此代码中的帐户记录:

好像被删了 由于该帐户不存在,我点击了一个未找到的页面。那么在不同的数据库清理策略之间来回切换似乎是导致问题的原因?

我可以从字面上运行 rspec --only-failures 并且我所有刚刚失败的测试都将通过。它只发生在功能/水豚规格上。

编辑:这是我的配置:https ://gist.github.com/gregblass/b886f79b0d8e2e2015af

更新:以下是一些失败的测试示例:https ://gist.github.com/gregblass/1b878d92a2b9dad355e0

更新 2:它发生在我做一个 js: true 测试之后。这些东西正在搞砸我的其他非 js capybara 测试。

0 投票
1 回答
1337 浏览

ruby-on-rails - DatabaseCleaner 不会在 Rails 测试单元中重置自动增量索引

测试/test_helper.rb :

我的测试单元文件:(test1 和 2 是重复的)

结果 :

为什么不起作用?我的错误在哪里?

0 投票
0 回答
150 浏览

ruby-on-rails - Rails RSpec/Cucumber 测试失败,因为 ActionMailer 在 DatabaseCleaner 之后运行

在我的 Rails 应用程序中,我有几个控制器,其中有一个 after_action 钩子,它通过 ActionMailer 发送电子邮件。像这样:

我的问题是我的测试套件随机失败,因为有时邮件程序在规范运行后仍需要完成执行,但由于每次测试后数据库都会被清理,邮件程序需要的对象不再存在。但我很确定这就是问题所在——我有一个测试以这种方式失败,但是当我sleep 1在最后一条expect(page).to have_something语句之前添加时,它通过了。我还可以在日志中看到它——在应用程序准备好之前数据库就被破坏了。

顺便说一句,我没有为邮件程序设置任何 ActiveJob,我只是使用了 Deliver_later,因为指南说它的工作原理相同,如果我稍后添加 ActiveJob,它就已经准备好了。

那么我该如何避免这种情况呢?如何确保应用程序在规范退出和 DatabaseCleaner 运行之前完成?

0 投票
1 回答
532 浏览

ruby-on-rails - 将参数传递给 rspec 测试示例

我有一些使用大型测试数据库的测试。我还在每次测试后使用 Database Cleaner 来清理数据库。问题来了。在我的规范助手中,我有这个

但是,这就是问题所在。提到的一组测试(一个大组)一遍又一遍地生成和删除这个大数据库(每个测试一次)。这需要很长时间,而且那些测试根本不会改变数据库,所以我真的不想每次都清理和创建数据库。

那么,有没有办法做这样的事情:

所以在规范助手中我可以做这样的事情:

或者也许有其他解决方案来解决这个问题?有任何想法吗?

0 投票
1 回答
584 浏览

ruby-on-rails - 使用 DatabaseCleaner 和事务的易碎测试。如何调试?

我有一个贯穿整个用户流程的功能/集成规范。在该用户流程结束时,应用程序中的一个页面将显示我的 Postgres 数据库中的一些记录。当我自己运行测试时,它通过了。自从 selenium 驱动程序打开 firefox: 以来,我可以通过各个步骤看到它正确保存Capybara.current_driver = :selenium。然而,当它在一堆控制器规范之后运行时,这个规范经常失败,几乎可以预见。在这些控制器规范中,我正在做的唯一有趣的事情是运行这个登录功能:

所以我这样称呼它:

当在控制器规范之后运行时,我可以立即看到测试将失败,因为某些 UI 元素应该根据数据库中的内容出现,并且显然它们不存在。

我的 DatabaseCleaner 策略如下:

通过反复试验我改变了

和沃拉,它通过了。当然,现在测试套件占用了 2 倍以上的时间。

我已经标记了我的所有:selenium测试,js: true以确保:truncation用于它们,但这并不重要,因为:selenium已经在驱动这些。然而,最重要的是,在这些控制器规范之后,此功能规范仍然失败。

我还应该去哪里寻找?如何进行调试?

我在这里唯一可能与之相关的独特之处是:

任何有关如何进行调试的建议或想法将不胜感激。

如果您有任何其他问题,请提出。谢谢

更新:2016 年 6 月 1 日

导致失败的确切代码行是:

因此,出于某种原因,使用此控制器规范(使用策略)访问数据库似乎会:transaction影响功能规范(使用:truncation策略)。

我正在争论在尝试验证设计用户时根本没有在控制器规范中访问数据库,这对我来说很酷,但我觉得它不应该是这样的。如果我确实希望能够使用该sign_in方法,有关如何进行的任何想法?

谢谢

0 投票
2 回答
268 浏览

mysql - DatabaseCleaner 不适用于 Capybara 自动化测试

我在运行 MySQL 的 Rails 站点上使用 Capybara 和 Poltergeist 运行自动化测试。

我在运行这个自动化套件时看到它在哪里提交“数据”插入,但是 DatabaseCleaner 似乎什么也没做,运行它时我也没有收到任何错误。

(我确保也安装了 gem)。这是我第一次使用 DatabaseCleaner,但似乎没有任何效果。

rails_helper 文件的相关部分:

另外,我确定config.use_transactional_fixtures = false.

我的 test_helper.rb 文件也没有什么花哨的:

最后是一个示例脚本,它基本上通过一个本地运行的 Rails 网站并创建一个记录。这很简单,但我只是以此为例。自动化测试都在做他们的事情。

我在这里错过了什么吗?运行时我没有收到任何错误,但数据不会被删除。

我正在运行 MySQL 5.6.26 和 Rails 4.0.2。

0 投票
0 回答
250 浏览

ruby-on-rails - 带有 AR-Octopus 的 Database_Cleaner 不清理记录

我们有一个使用分片数据库的 AR-Octopus gem 项目。我们遇到的问题是 gem 'database_cleaner' 在使用这个设置时没有清理记录,因为我们的测试数据库中一直有剩余的记录,这会导致我们的测试套件出现问题。

我找到了这个 GitHub 要点 - https://gist.github.com/nowlinuxing/22ea0ab673a5622eb48d

这是我的 database_cleaner 配置文件

有没有人遇到过这个问题?如果是这样,你做了什么来解决这个问题?只是寻找一些有用的见解。

0 投票
1 回答
147 浏览

ruby-on-rails - Ruby on Rails 集成测试数据库清理器防止清理?

我想加载部分数据库。当我运行集成测试时。但是对于控制器和模型测试,我想跳过它并在每次测试之间进行清理。所以问题是它目前在集成测试中清理数据库,但我想阻止这种情况。我怎么做?

0 投票
1 回答
75 浏览

ruby-on-rails - 请求规范订单相关失败(为登录时设计用户更新创建了错误的 SQL)

当请求规范失败(错字或其他异常)时,我们目前面临一个问题,它会影响实际上应该不受影响的其他请求规范。问题是我们使用了很多 gem,所以我尝试创建一个最小的复制应用程序(没有成功,https://github.com/tak1n/reproduction

问题详细:

我们有一个请求规范,我们需要在其中登录用户。对于用户身份验证,我们使用设计,因此我们使用 Warden::Test::Helpers 在请求规范中登录用户。当用户登录时,Devise 会自动更新一些与用户相关的属性(last_sign_in_at、last_sign_in_ip 等)。

这里的问题是,当它尝试保存用户以进行此更改时,最终结果是 INSERT INTO 用户而不是 UPDATE 用户,因此它崩溃了。

这是我们应用程序的示例规范:

这样做的结果应该是第一个规范由于错字而失败paramst,它确实如此,但它也影响了第二个规范:

这是规范运行:https ://gist.github.com/tak1n/102c1aa121b66e0ab56602b76f911ec0

我试图深入挖掘并看到 save 创建或更新记录的逻辑取决于https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb#L85

接下来,我尝试输出@new_record这种情况下的内容。

我得到了关注:https ://gist.github.com/tak1n/330560a3a108abc8fce4d105a48ac444

当规范以不同的顺序运行时(先不失败,然后规范有错字或异常),我得到了这个:https ://gist.github.com/tak1n/6eb24693226d8e6a713c0865ea1bebd5

这里的区别在于“工作”规范运行New Record: <boolean>不同。当带有异常的规范在它之前运行时,新记录突然变为真,因此它会生成 SQL 来创建新记录。

接下来我假设一些宝石导致了这个问题,很可能我认为它会是 database_cleaner 但在复制中我或多或少地做同样的事情并且它在那里工作。

问题是我真的被困在调试中,不知道从哪里开始。此外,我不确定是哪个 gem 或我们的代码本身导致了这种情况。

如果您需要更多详细信息,请随时提出任何问题,在此先感谢。

0 投票
2 回答
1226 浏览

ruby-on-rails - 如何为同一功能下的所有场景运行一次黄瓜背景步骤?

在 Cucumber 中,是否可以为整个功能运行后台步骤?所以它不会重复每个场景?

我正在搜索引擎上运行一些测试,我需要用测试数据预先给搜索引擎播种。由于这些数据的生成和处理时间可能很长(我正在使用 Elasticsearch 并且我需要构建索引),所以我宁愿只做一次这个背景,但只针对同一功能下的所有测试。

黄瓜可以吗?

请注意,我使用的是 MongoDB,所以我不使用事务而是截断,并且我相信每次测试后我都会自动运行 DatabaseCleaner,我想我必须禁用它(可能带有@mention?)

编辑 :

是的,我正在使用 Cucumber 和 Rails 的 Ruby 步骤

EDIT2:具体例子

  • 我需要测试我的搜索引擎是否总是返回相关结果(例如,在搜索“买家”时,它应该返回带有“买家”、“购买”、“购买”等的结果(与 ES 配置有关),并且其他上下文信息得到正确更新(例如在侧边栏中

  • 我的类别/过滤器带有括号中的命中数,我必须确保在用户使用过滤器时刷新这些数字)

为此,我在搜索引擎中预先设置了十几个结果,并运行所有基于相同输入的测试。我经常有“示例”子句,它们只是做了一些稍微不同的事情,但基于相同的种子