TDD with RSpec出错集之Integration测试篇

TDD 学习笔记。

写在前面

本场测试的star是 Capybara。

考虑到自己写的method还是挺多的,就没有一一integration test了。

实作了简单的首页测试,用户注册,用户登录,用户退出。

记录下遇到的问题,顺带加入了debug的部分。

正文

  • Capybara::ElementNotFound: Unable to find visible link or button “ 登出”

做登录,登出的测试时,终端报出如下错误:

报错显示页面找不到“ 登出”这个link 或者button,对应的测试文件长这样:

怎么破?

第一想法就是查看一下用户登录后,点击”Hi!, #{user.username}”,页面这时候是长啥样,是不是真的没有“ 登出”这个link 或者button。

怎么做呢?好办,加入save_and_open_page, 注释掉报错的代码,像这样👇:

终端再次运行案例,得到这样的一串网址:

终端输入:open tmp/capybara/capybara-201710230848216776109515.html, 浏览器便会打开这个网址了。

我的是这样子:

有登出呢!为什么显示Unable to find visible link or button ?那只能说明这不是一个link or button?Google后,发现在stackoverflow上有个非常相似的案例:How to use capybara in rspec to click on a dropdown option

试试把click_on" 登出"换成page.find(:xpath, "//a[@href='/users/sign_out']").click, 终端再次运行案例,Pass!!

but ,xpath是啥?XPath 是一门在 XML 文档中查找信息的语言,用于在 XML 文档中通过元素和属性进行导航。

了解更多可以看看W3school的教程xpath

在capybara中为什么要这么用?戳这里capybara XPath, CSS and selectors .

The end

capybara 中,操作页面的方法除了visit,click外,还有很多比如fill_in, check,choose等等,很强大。

详见:capybara