Rspec视图测试无法解决,帮我排除故障

时间:2014-01-23 19:54:49

标签: ruby-on-rails ruby rspec

我正在编写Rspec视图测试,测试没有通过,但我不确定原因。换句话说,测试的编写方式没有错误,只是期望不符合结果。爱会帮助排除故障。

在下面的测试中,我最初认为问题是我正在寻找的链接位于应用程序布局的导航栏中。所以根据这篇文章的建议:getting Rspec view specs to render application layout,我明确地调用了要呈现的模板和布局。但是,仍然无法找到正确的链接。

我写的href标签直接从实际页面上的inspect元素复制。我也尝试编写路由给我的new_request_path,但这也没有用。

感谢您的帮助!

RSpec查看测试代码:

describe 'signups/new.html.erb' do

it 'displays link to request pages not signup page' do
  assign(:signup, FactoryGirl.build(:signup))
  render template: "signups/new", layout: "layouts/application"
  rendered.should have_link(href: "/new")
end
end

仅供参考,检查元素:

 <a class="navbar-brand" href="/new">Make a new request</a>

仅供参考,路线:

 get 'new', to: 'requests#new', as: 'new_request'

仅供参考,正在呈现的应用程序布局:

<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <a class="navbar-brand" href="<%= root_path %>">Home</a>
      <a class="navbar-brand" href="<%= new_request_path %>">Make a new request</a>

我认为不需要从正在渲染的新模板中发布任何内容,因为hte test只在应用程序布局中查找。 (但它不是基于布局的视图测试,因为1)我正在测试页面作为一个整体,并且在布局中触发了不同的闪存消息,因为2)我正在编写的其他测试[同样卡住但我认为我可以如果我得到一个帮助,请弄明白它们看看实际的新模板)

1 个答案:

答案 0 :(得分:1)

有点想通了这里,这里有一些简短的笔记:

  1. 控制器中的Render_view从未起作用,我只是删除了它 完全(至少控制器测试通过!)
  2. 太可怕了,但理性测试没有通过是因为我的 model被命名为Request,所以我的变量是@request,它 显然已经是一个类,所以有一个名称冲突。一世 基本上必须将@request的每个实例都改为@requestrecord
  3. 测试中确实存在一些语法错误。 have_selector(&#39; csstag&#39;)必须以a为前缀。对于css类或#对于css id。同样,has_link必须采用链接名称,例如has_link(&#34; Home&#34;,href:root_path)。如果后者可以改变,那就太棒了,因为我认为链接的硬标题可以很容易地改变,这令人担忧。
  4. 在两个经过测试的视图中,实际视图中的第一行代码是if / then语句,用于测试某个变量的表单提交(然后闪烁适当的消息)中的错误。这使视图绊倒,因为在隔离的情况下,这些变量从未定义过。所以在测试中,我必须总是添加一个刚刚传递给变量的任意数据的前块。