Действительно странная проблема с прохождением теста контроллера rspec, где код верен - PullRequest
0 голосов
/ 14 мая 2011

У меня странная проблема, когда я знаю, что код работает, тест RSpec пройдет, если я сам запущу этот файл Spec, но он завершится неудачно, когда я выполню все тесты во всем наборе (все в /specs).

Вот тест:

require 'spec_helper'

describe WebpagesController do
  include Devise::TestHelpers

  render_views

  describe "GET 'show'" do
    it "should render the template if it exists" do
      get 'show', :page => "tour"

      response.should render_template("tour")
    end

    it "should render 404 page if template does not exist" do
      expect {
        get 'show', :page => 'does_not_exist'
      }.to_not raise_error(ActionView::MissingTemplate)

      response.should render_template("/public/404")
    end
  end

end

Вот код:

class WebpagesController < ApplicationController

  def show
    begin
      render(params[:page])
    rescue ActionView::MissingTemplate
      render("/public/404")
    end
  end

end

Идея заключается в том, что действие show должно отображать шаблон с любым именем, заданным параметром, но если его не существует, мы хотим отправить пользователя на общую страницу 404.

Теперь я мог бы просто продублировать шаблон 404 в директории вида / webpages, но я действительно хочу выяснить, как я могу это передать, используя тот, который есть в папке / public, как я пытаюсь сделать здесь.

Если я запускаю тест по отдельности - это ПРОЙДЕТ. Если я запускаю тест со всеми остальными, я получаю следующую ошибку:

expected no ActionView::MissingTemplate, got #<ActionView::MissingTemplate: Missing template /public/404 with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/home/egervari/Projects/training/app/views", "/usr/local/lib/ruby/gems/1.9.1/gems/devise-1.3.4/app/views", "/home/egervari/Projects/training/spec", "/">
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.5.0/lib/rspec/expectations/fail_with.rb:29:in `fail_with'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.5.0/lib/rspec/expectations/handler.rb:44:in `handle_matcher'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.5.0/lib/rspec/expectations/extensions/kernel.rb:50:in `should_not'
/home/egervari/Projects/training/spec/controllers/webpages_controller_spec.rb:17:in `block (3 levels) in <top (required)>'

Честно говоря, я был озадачен этим в течение нескольких дней, и я просто работал над другими вещами ... но я немного раздражен, когда все время провал одного теста, хотя я лично знаю, что все в порядке .

Спасибо за помощь

1 Ответ

2 голосов
/ 14 мая 2011

Ошибка на самом деле говорит о том, что ваша строка render('/public/404') является той, которая выдает ошибку.

Попробуйте отобразить полный путь к файлу 404 вместо /public/404/:

render("#{Rails.root}/public/404.html")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...