Единственное объяснение состоит в том, что где-то на странице есть еще один тег <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, либо, по крайней мере, убедиться, что те, которые вы хотите активировать, включены последними.
Я понял что-то.
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 для специфических особенностей :)
Я предполагаю, что это находится в спецификации контроллера?
Ваше собственное предложение должно хорошо работать. Другая возможность состоит в том, чтобы переместить вызов named_scope в Вашей модели, для предотвращения проблемы полностью. Это также соответствовало бы "толстым моделям, тонкие контроллеры" совет.
Я думаю, что Вы уже сделали тонкую вещь контроллера путем помещения запроса в именованный объем, где это может быть снова использовано. Вот некоторый код, который я использовал, прежде чем я начал использовать названный объемами.
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 - это немного старо теперь, но все еще некоторые хорошие идеи там.