首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec没有创建从poltergeist访问的数据库记录。

Rspec没有创建从poltergeist访问的数据库记录。
EN

Stack Overflow用户
提问于 2014-07-24 11:53:27
回答 1查看 1K关注 0票数 4

我很难让Poltergeist和RSpec在一起玩得很好。

我编写了以下测试:

代码语言:javascript
复制
  it "allows the trainer to view a runner" do
    visit '/'
    all(:xpath,'//a[@id="get-started"]').first.click
    fill_in :name, with: "New Admin"
    fill_in :email, with: "admin@test.org"
    fill_in :password, with: "letmein"
    fill_in :password_confirmation, with: "letmein"
    all(:xpath,'//input[@id="get-started-submit"]').first.click
    @runner_1 = FactoryGirl.create(:runner, name: "Axel", email: "axel@test.org")
    visit '/runners/axel'
    debugger

实际上,上面所做的就是用密码“letmein”注册“New”,然后尝试查看“Axel”的runner profile页面。

在调试器中断的地方,我可以看到已经创建了@runner_1 (Axel):

代码语言:javascript
复制
Runner.friendly.find('axel')

>> #<Runner id: 2, email: "axel.manzano@hotmail.fr",........>

然而,当试图访问'/runners/axel‘时,Poltergeist报告说:

代码语言:javascript
复制
ActiveRecord::RecordNotFound

这不是路线的问题,或者类似的问题。

实际上,在深入研究了这个bug之后,似乎在Poltergeist正在访问的环境中并没有真正设置在测试文件中创建的任何内容。

我似乎不明白为什么。任何帮助都非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 15:59:49

很有可能,您正在rspec中使用“事务性固定装置”。这意味着每个测试都在数据库事务中运行,该事务在测试结束时回滚,因此每个测试都有一个干净的数据库。

其他线程/程序可以而不是来查看事务中正在发生的事情。Poltergeist在单独的线程中运行服务器,这意味着它看不到任何写入rspec数据库的内容(尽管它可以直接从rspec代码中访问)。

对这种现象的描述在水豚的主页上。解决方案是禁用rspec中的事务特性,并在测试后使用类似于DatabaseCleaner的方法重置数据库。

这是可行的,但不幸的是,截断或删除数据库内容要比使用事务性方法慢一些--这就是为什么tranasactions最初是默认的。

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

https://stackoverflow.com/questions/24932947

复制
相关文章

相似问题

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