Блокирование цепочечных методов с Rspec

Единственное объяснение состоит в том, что где-то на странице есть еще один тег <script>, ссылающийся на файл firebase-app.js, например,

<script src="https://www.gstatic.com/firebasejs/5.9.1/firebase-app.js"></script>

Этот тег будет появляться после вашего включение firebase.js или firebase-app.js и firebase-auth.js.

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

Решение состоит в том, чтобы либо удалить дубликаты включений скрипта Firebase, либо, по крайней мере, убедиться, что те, которые вы хотите активировать, включены последними.

11
задан BoltClock 25 February 2012 в 05:21
поделиться

3 ответа

Я понял что-то.

Client.stub!(:named_scope).and_return(@clients = mock([Client]))
@clients.stub!(:first).and_return(@client = mock(Client))

который позволяет мне называть свой контроллер:

@client = Client.named_scope(param).first

Это работает, но является там лучшим решением?

Править:

Выпуск rspec 1.2.6 позволяет нам использовать stub_chain, означающий это, может теперь быть:

Client.stub_chain(:named_scope, :chained_call).and_return(@clients = [mock(Client)])

Это было вершиной моей головы, как всегда проверка API для специфических особенностей :)

16
ответ дан 3 December 2019 в 05:36
поделиться

Я предполагаю, что это находится в спецификации контроллера?

Ваше собственное предложение должно хорошо работать. Другая возможность состоит в том, чтобы переместить вызов named_scope в Вашей модели, для предотвращения проблемы полностью. Это также соответствовало бы "толстым моделям, тонкие контроллеры" совет.

1
ответ дан 3 December 2019 в 05:36
поделиться

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

  def mock_comm(stubs={})
    @mock_comm ||= mock_model(Comm, stubs)
  end

  describe "responding to GET index" do

    it "should expose all comms as @comms" do
      Comm.should_receive(:find).with(:all).and_return([mock_comm])
      get :index
      assigns[:comms].should == [mock_comm]
    end
# ...

Я, вероятно, написал бы код, весьма схожий с тем, что Вы уже имеете, но возможно помещаете его в помощника, который позволяет мне снова использовать его. Другая вещь состоит в том, чтобы использовать другую платформу насмешки, которая, возможно, дает Вам больше контроля. Взгляните на railscast Ryan Bates на RSpec - это немного старо теперь, но все еще некоторые хорошие идеи там.

0
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: