У меня странная проблема, когда я знаю, что код работает, тест 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)>'
Честно говоря, я был озадачен этим в течение нескольких дней, и я просто работал над другими вещами ... но я немного раздражен, когда все время провал одного теста, хотя я лично знаю, что все в порядке .
Спасибо за помощь