Rspec: Есть ли проблема с rspec-rails при инициализации класса контроллера с помощью super (args)? - PullRequest
4 голосов
/ 01 февраля 2010

Я уже некоторое время использую Rspec и по какой-то причине получаю ошибки на контроллере ReferencesController.

Ошибка говорит о том, что я должен указать имя контроллера, используя:

 describe MyController do

или

 describe 'aoeuaoeu' do
   controller_name :my

Я пробовал оба варианта:

 describe ReferencesController do

и

 describe 'refs controller' do
   controller_name :references

Но я получаю ошибку для обоих! Есть идеи, что может быть не так?

Berns

РЕДАКТИРОВАТЬ : Из-за характера решения я переписал заголовок и добавил соответствующий код. Вот ошибочный код:

# references_controller.rb

class ReferencesController < ApplicationController
  def initialize(*args)  
    #do stuff

    super(args)   #  <= this is the problem line
  end

  def index

  end
end

И ошибка:

    1)
    'ReferencesController GET index should take parameters for a company and return the references' FAILED
    Controller specs need to know what controller is being specified. You can
    indicate this by passing the controller to describe():

        describe MyController do

    or by declaring the controller's name

        describe "a MyController" do
            controller_name :my #invokes the MyController
    end

Ответы [ 2 ]

3 голосов
/ 02 февраля 2010

Если вы вызываете super(args), вы передаете один аргумент - массив, на который ссылается args. Использование «оператора сплата» - super(*args) - превращает массив в список и передает каждый элемент args в качестве отдельного аргумента.

Как указал Уэйн, в Ruby есть небольшой синтаксический сахар, который позволяет вам просто сказать super, и он автоматически передаст вам аргументы, трактуя его как super(*args) вместо super().

В вашем конкретном случае я бы предположил, что метод initialize вашего суперкласса Контроллера не принимает массив, поэтому, когда RSpec попытался создать экземпляр вашего Контроллера, он потерпел неудачу, что в итоге привело к появившемуся сообщению об ошибке.

1 голос
/ 01 февраля 2010

Doh! Разобрался ...

Метод инициализации имел «super (args)» вместо «super (* args)»

Если кто-то захочет переписать этот ответ и дать полное объяснение (или, возможно, объяснить, почему я не должен определять переменную экземпляра таким образом), я с удовольствием проголосую и дам вам принятый ответ. *

Bernie

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