使用 Javascript 时我无法使请求规范正常工作。
我的规格pass如果我在没有 Javascript 的情况下运行它们(页面构建为可以使用或不使用 JS)。
具体来说,当我进行如下断言时,规范会失败Post.should have(1).record
。
Capybara 只是不从数据库中获取记录,并且数据库在运行之间不会被清理。
我尝试过在禁用事务装置的情况下使用 DatabaseCleaner - 我猜这是常见的方法。没有骰子。
我还尝试过(并且最好更喜欢)在没有 DatabaseCleaner 的情况下运行,使用事务固定装置并强制 AR 在线程之间共享相同的连接(José Valim 描述的补丁 http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/)。再说一次,没有骰子。
此外,我还尝试在 Capybara-webkit 和 Selenium 之间切换 - 问题仍然存在。
我已经建立了一个示例应用程序,其中只有一个基本的 Post 脚手架,它复制了这个问题:https://github.com/cabgfx/js-specs 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)。
希望我说得有道理 - 任何指导/帮助/指示都是greatly赞赏!
马特 - 非常感谢您抽出时间来帮助我!
我尝试使用你的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 猴子补丁似乎工作得很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)