2014-02-02 10 views
0

Я понятия не имею, что я делаю неправильно здесь:Как издеваются с RSpec

мой контроллер:

class UsersController < ApplicationController 
    def index 
     User.all 
    end 
end 

мой контроллер спецификации:

it "" do 
    get :index 
    User.should_receive(:all) 
    end 

и все же я получаю это ошибка:

1) UsersController 
    Failure/Error: User.should_receive(:all) 
     (<User(id: integer, name: string, email: string, created_at: datetime, updated_at: datetime, password_digest: string, remember_token: string) (class)>).all(any args) 
      expected: 1 time with any arguments 
      received: 0 times with any arguments 

ответ

0

просто поменяйте местами

it "" do 
    User.should_receive(:all) 
    get :index 
end 

EDIT: «should_receive» говорит RSpec «с этого момента, до конца спецификации, пользователь не должен получить метод: все, по крайней мере один раз», то вы звоните получаете: индекс и пользователь фактически получает метод

другой способ (как это не работает), вы вызываете get: index, Пользователь получает метод: all и ПОСЛЕ того, что вы скажите rspec «с этого момента, Пользователь должен получить метод хотя бы один раз» , метод был вызван ДО ПРЕДОСТЕРЕЖЕНИЯ should_receive, поэтому он не прошел

+0

Это произошло, но я думаю, что здесь немного отсутствует пункт ... как метод '.all' объекта пользователя запускается до t он '# index' метод запускается' get: index'? – Starkers

+1

Я бы порекомендовал вам немного больше объяснений с вашим ответом - хотя это может сработать, на самом деле это не передается * почему * – helion3

+0

добавил объяснение, should_receive действует с момента его вызова до конца спецификации, это просто как should_receive работает и как он должен быть вызван – arieljuod

Смежные вопросы