Не удается получить спецификацию представления RSpec для передачи - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть следующая спецификация в spec/views/users/new.html.erb_spec.rb:

require 'spec_helper'

describe "users/new.html.erb" do 
  it "displays the text attribute of the message" do
    render
    response.should contain("Register")
  end 
end

Но когда я запускаю тест, он терпит неудачу с:

ActionView::TemplateError in 'users/new.html.erb displays the text attribute of the message'
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

Строка, на которой происходит сбой:

<% form_for @user, :url => account_path do |f| %>

В моем Users контроллере для метода new у меня есть это:

@user = User.new

Есть идеи, почему я получаю эту ошибку?

ОБНОВЛЕНИЕ: По запросу, вот мой файл маршрутов ...

ActionController::Routing::Routes.draw do |map|
  map.resource :account, :controller => "users"
  map.resources :users

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

Ответы [ 2 ]

3 голосов
/ 28 сентября 2010

Спецификация представления выполняется в полной изоляции от контроллера Users.Таким образом, вы должны сами инициализировать переменные, необходимые в представлении, как описано здесь .Результат будет примерно таким:

require 'spec_helper'
require 'path/to/user.rb'

describe "users/new.html.erb" do 
  it "displays the text attribute of the message" do
    assigns[:user] = User.new
    render
    response.should contain("Register")
  end 
end

Если вы хотите проверить свое представление вместе с вашим контроллером, я бы посоветовал изучить интеграционное тестирование с Cucumber.

1 голос
/ 22 мая 2013

Просто более обновленный ответ.

require 'spec_helper'

describe "users/new.html.erb" do 
  it "displays the text attribute of the message" do
    assign(:user, stub_model(User))
    render
    expect(rendered).to include("Register")
  end 
end

Это должно работать на рельсах 3.2.13 и rspec 2.13.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...