cab*_*gfx 5 testing rspec ruby-on-rails capybara capybara-webkit
使用 Javascript 时,我无法使请求规范生效。如果我在没有 Javascript 的情况下运行它们,我的规格就会通过(页面被构建为可以使用或不使用 JS)。
具体来说,当我执行像Post.should have(1).record. Capybara 只是不从数据库中提取记录,并且在运行之间不会清理数据库。
我试过在禁用事务性装置的情况下使用 DatabaseCleaner - 我猜这是常用的方法。没有骰子。
我也尝试过(并且,理想情况下更喜欢)在没有 DatabaseCleaner 的情况下运行,使用事务性装置并强制 AR 在线程之间共享相同的连接(José Valim 描述的补丁)。再次,没有骰子。
此外,我还尝试在 Capybara-webkit 和 Selenium 之间切换 - 问题仍然存在。
我已经建立了一个示例应用程序,它只有一个基本的 Post 脚手架,它复制了这个问题:https : //github.com/cabgfx/js-specs 有一个带有事务装置和 AR 共享连接的 spec_helper.rb,以及一个 spec_helper_database_cleaner。 rb 用于其他场景。
我通常使用 Spork,但我在两个 spec_helper.rb 文件中都禁用了它,只是为了消除潜在的故障点(在两个应用程序中;“真实”应用程序和示例应用程序)。
我在 Macbook Air 上使用 Pow 进行本地开发,通过 RVM 运行 OS X 10.7.3 和 MRI 1.9.3。(我也在 1.9.2 上试过)。
希望我是有道理的 -非常感谢任何指导/帮助/指针!
马特 - 非常感谢您抽出时间来帮助我!我尝试使用你的spec_helper进行设置,使用Selenium作为javascript驱动程序。
规范仍然失败 - 但我可以看到 Firefox 中正在执行正确的行为...然后我突然意识到,问题可能是因为 Capybara 没有等待 AJAX 请求完成而发生的。
然后我恢复到最初的spec_helper(使用Spork,没有DatabaseCleaner),并简单地使用Capybara的wait_until { page.has_content? "text I'm inserting with JS" }.
我更新了示例应用程序,并刚刚添加到sleep 1请求规范中,以便您自己查看。现在无论有没有 Spork,它都可以工作,而且 AR 猴子补丁似乎工作得很好。