Rails rspec ожидает Admin :: PostsController, который там - PullRequest
2 голосов
/ 08 января 2011

У меня есть файл app/controllers/admin/posts_controller.rb

class Admin::PostsController < ApplicationController
  layout 'admin'

  # GET /admin/posts
  def index
     @pposts = Post.paginate :page => params[:page], :order => 'created_at DESC'
  end
  # ...Many more standard CRUD/REST methods...
end

И тест rspec spec/controllers/admin/posts_controller_spec.rb

require 'spec_helper'

describe Admin::PostsController do

  describe "GET 'index'" do
    it "should be successful" do
      get 'index'
      response.should be_success
    end
  end
  #...many more test for all CRUD/REST methods
end

Однако, выполнение этой спецификации выдает ошибку. Я понятия не имею, что означает эта ошибка, и как начать ее устранять.

/home/...../active_support/dependencies.rb:492:in `load_missing_constant': Expected /home/...../app/controllers/admin/posts_controller.rb to define Admin::PostsController (LoadError)

Возможно, у меня все настроено неправильно, или, может быть, я делаю что-то действительно глупое, но все, что мне нужно, это мои действия CRUD над / admin, с отдельными фильтрами перед и отдельным макетом. И проверить эти контроллеры.

РЕДАКТИРОВАТЬ ZOMG, допустил ужасную ошибку копирования-вставки в эту публикацию SO. Контроллером был PostsController, а не PagesController, который я вставил туда. Проблема все еще стоит, так как мой код правильный, просто сообщение ТАК, здесь было неправильно.

Ответы [ 4 ]

1 голос
/ 09 января 2011

Все выглядит правильно для меня.Вы делаете что-нибудь необычное в spec_helper?

1 голос
/ 08 января 2011

Ваш файл posts_controller.rb должен определять класс Admin :: PostsController, но он определяет Admin :: PagesController.

Было ли это копировать и вставлять?: -)

0 голосов
/ 09 января 2011

Немного проб и ошибок дало мне:

описать Admin :: PostsController do end

должно быть

описать "Admin :: PostsController" do end

Я понятия не имею, почему, так как вся магия Rails-модуля у меня над головой.Но я подозреваю, что это происходит из-за автозагрузки, которая ожидает строку, а не модуля класса + здесь.

РЕДАКТИРОВАТЬ Несмотря на то, что это устраняет ошибку, оно просто создает похожую проблему: @controller в этом случае не определен.Что делает невозможным тестирование контроллера вообще :).Оставайтесь с нами ...

0 голосов
/ 08 января 2011

Berkes, вы не должны помещать файл контроллера в подпапку, то есть файлы должны находиться в

app/controllers/posts_controller.rb

и

spec/controllers/posts_controller_spec.rb

Как только вы получите этоготово, вам нужно добавить вызов метода "render_views" в вашей спецификации сразу после "description Admin :: PostsController do" следующим образом:

require 'spec_helper'

describe Admin::PostsController do
  render_views

  describe "GET 'index'" do
    it "should be successful" do
      get 'index'
      response.should be_success
    end
  end
  #...many more test for all CRUD/REST methods
end
...