首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Poltergeist丢失数据库信息

Poltergeist丢失数据库信息
EN

Stack Overflow用户
提问于 2016-08-23 00:40:47
回答 1查看 82关注 0票数 0

我有一个ActiveRecord类,Post。

在我使用Capybara、RSpec和Poltergeist运行的功能规范中,我使用FactoryGirl创建了两个实例

代码语言:javascript
复制
FactoryGirl.create(:post, topic: "Blade running")
FactoryGirl.create(:post, topic: "Dreaming of electric sheep")

我可以立即在说明书中确认:

代码语言:javascript
复制
scenario "Linking to post by tag", js: true do
  FactoryGirl.create(:post, topic: "Blade running")
  FactoryGirl.create(:post, topic: "Dreaming of electric sheep")
  Post.count # => 2
  Post.all.all?(&:persisted?) # => true
  visit root_path
  # more stuff
end

但是当我在下一行访问我的应用程序的根路径时(它指向我的帖子应用程序中的索引操作),帖子已经消失了(以及它们的关联):

代码语言:javascript
复制
class PostsController < ApplicationController
  def index
    @posts = Post.all # => []
    #stuff
  end

# more methods
end

当我从控制器动作返回到测试层时,它们又回来了:

代码语言:javascript
复制
Post.count # => 2
Post.all.all?(&:persisted?) # => true
visit root_path
Post.count # => 2
Post.all.all?(&:persisted?) # => true

在不使用JS的规范中,我没有这个问题--只要从场景中删除"js: true“就可以解决这个问题。但由于我使用的是需要JS的站点的一部分,这不是一个选项。

我会在Poltergeist问题上发表这篇文章,但由于我正在做一些非常基本的事情,所以我感觉更有可能是我做错了什么,而不是Poltergeist的这一部分被打破了。我的错误是什么?

版本: Rails为5.0.0,Poltergeist为1.10.0 Capybara为2.8.0 Rspec-Rails为3.5.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-23 00:58:08

这听起来像是在使用事务性测试,它不适用于支持JS的驱动程序,因为测试和应用程序代码是在不同的线程中运行的。这些线程中的每一个都维护着自己的数据库连接,这意味着在事务提交之前,一个线程无法看到在另一个线程中创建的记录。对于事务性测试,事务永远不会提交,因此线程看不到在另一个线程中创建的任何内容。请参阅https://github.com/jnicklas/capybara#transactions-and-database-setup,然后将database_cleaner配置为对支持JS的测试使用截断(或删除)策略- https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39084655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档