Ожидание для find не работает, но ожидание для find_by_id - PullRequest
0 голосов
/ 07 июля 2010

У меня есть этот код контроллера:

# GET /cardsets/1
def show
  @cardset = current_user.cardsets.find_by_id(params[:id])
end

И этот тестовый код RSpec (издевается над Мокко):

# GET Show
context "on get to show" do
  it "should assign cardset" do
    @cardset = Factory(:cardset)
    @profile = @cardset.profile

    @profile.cardsets.expects(:find).once.returns(@cardset)
    get :show, :id => @cardset.id
    assigns[:cardset].should_not be_nil
  end
end

Этот тест не пройден с:

2)
Mocha::ExpectationError in 'CardsetsController for a logged in user on get to show should assign cardset'
not all expectations were satisfied
unsatisfied expectations:
- expected exactly once, not yet invoked: [#<Cardset:0x1032bb660>].find(any_parameters)
satisfied expectations:
- allowed any number of times, not yet invoked: ApplicationController.require_user(any_parameters)
- allowed any number of times, already invoked twice:     #<CardsetsController:0x10336c578>.current_user(any_parameters)

Если я изменю ожидание на:

@profile.cardsets.expects(:find_by_id).once.returns(@cardset)

Тогда тест пройден, почему он пройдет с find_by_id, а не с поиском?

1 Ответ

1 голос
/ 08 июля 2010

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

...