2014-01-23 40 views
1

我正在写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 

FYI,检查元素:

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

FYI,路线:

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

FYI,应用布局被呈现:

<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)我正在测试整个页面,并且布局中触发了不同的Flash消息,因为2)我正在编写的其他测试[同样卡住了,但我认为我可以计算出来,如果我得到一个求助]看看实际的新模板)

+0

在rspec配置中有这个'config.render_views'吗? –

+0

如果您实际测试布局,为什么这是对signups/new.html.erb视图的测试? –

+0

@Derek它不是基于布局的视图测试,因为1)我测试整个页面,并且在布局中触发不同的Flash消息,因为2)我正在编写的其他测试[同样卡住了,但我想我可以找出他们,如果我得到一个帮助]看看实际的新模板 – james

回答

1

有点想通了这一点,这里有一些速记笔记:

  1. Render_view在控制器从来没有工作过,我只是删除它 完全(至少控制器测试通过!)
  2. 太可怕了,但理智观点测试没有通过是因为我的 模型被命名为请求所以我的变量是@request,其中 显然已经是一个类,所以出现名称冲突。 I 基本上必须将@request的每个实例都更改为@requestrecord
  3. 测试中确实存在一些语法错误。 have_selector('csstag')必须以a作为前缀。为css类或#为css id。同样,have_link必须带有链接的名称,例如,have_link(“Home”,href:root_path)。如果后者可以改变,那就太棒了,因为我认为写一个关于链接的书面标题很难,而且很容易改变。
  4. 在两个经过测试的视图中,实际视图中的第一行代码是if/then语句测试某个变量的表单提交(然后闪烁适当的消息)中的错误。这绊住了视野,因为孤立地说,这些变量从未被定义过。所以在测试中,我必须总是添加一个刚刚通过变量的一些任意数据的before块。