rspec ошибка в ruby ​​с перед каждым - PullRequest
0 голосов
/ 03 ноября 2011

Я работаю с книгой Learn Rails By Example и натолкнулся на интересную проблему.Я заранее извинюсь, если сделаю что-то не так.Вот проблема.

В разделе 3.5, в упражнении, в котором вас просят сделать следующее:

Возможно, вы заметили некоторое повторение в спецификации контроллера Pages (Листинг 3.20).В частности, базовый заголовок, «Образец учебного приложения Ruby on Rails», одинаков для каждого теста заголовка.Используя средство RSpec before (: each), которое выполняет блок кода перед каждым тестовым примером, заполните Листинг 3.33, чтобы определить переменную экземпляра @base_title, которая устраняет это дублирование.(Этот код использует два новых элемента: символ,: каждый и оператор конкатенации строк +. Мы узнаем больше об обоих в Главе 4, и мы увидим раньше (: каждый) снова в Разделе 6.2.1.)Обратите внимание, что с базовым заголовком, захваченным в переменной экземпляра, теперь мы можем выровнять: содержимое с первым символом внутри каждой левой круглой скобки (. Это мое предпочтительное соглашение для форматирования кода, разбитого на несколько строк.

Вот как выглядит мой pages_controller_spec.rb:

describe PagesController do
  render_views

  before(:each) do
    # Define @base_title here.
    base_title = "Ruby on Rails Tutorial Sample App"
  end

  describe "GET 'home'" do
    it "should be successful" do
      get 'home'
      response.should be_success
    end

    it "should have the right title" do
      get 'home'
      response.should have_selector("title",
                                    :content => @base_title + " | Home")
    end
  end

Когда я загружаю сервер rails и открываю веб-страницу, все работает отлично. Название отображается так, как должно быть в base_title.Я запускаю rspec, я получаю следующие ошибки. Мне бы очень хотелось, чтобы это было исправлено в rspec. Что вы думаете не так?

  1) PagesController GET 'home' should have the right title
     Failure/Error: :content => @base_title + " | Home")
     NoMethodError:
       You have a nil object when you didn't expect it!
       You might have expected an instance of Array.
       The error occurred while evaluating nil.+
     # ./spec/controllers/pages_controller_spec.rb:20

Failed examples:

rspec ./spec/controllers/pages_controller_spec.rb:17 # PagesController GET 'home' should have the right title

1 Ответ

0 голосов
/ 03 ноября 2011

Я думаю, вам нужно @base_title = "Ruby on Rails Tutorial Sample App" в строке 6, а не base_title.Переменная, определенная как вы, там не становится автоматически переменной экземпляра

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