2016-05-19 5 views
0

Я хочу проверить, что конкретный значок отображается в представлении для пользователя с полосой больше, чем X дней. Поэтому мне нужно заглушить streak метод User. Но я хочу, чтобы он заглушил метод только для определенного пользователя на основе его uid. Тестовый код приведен ниже. неОтдельные экземпляры экземпляра класса в функциональном тесте

test "should display an icon for users with streak longer than 7 days" do 
    node = node(:one) 
    User.any_instance.stubs(:streak).returns([8,10]) 
    get :show, 
     author: node.author.username, 
     date: node.created_at.strftime("%m-%d-%Y"), 
     id: node.title.parameterize 
    assert_select ".fa-fire", 1 
end 

Возвращаемое значение является массивом, то первое значение в массиве не является не дни в подряде и второе значение является не посты в этой полосе.

Линия User.any_instance.stubs(:streak).returns([8,10]) заглушки любого экземпляра User класс. Как я могу заглушить его так, чтобы он заглушил только те экземпляры, где :uid => 1?

+0

Я не знаю, Руби, но то, что вы описываете его создания «подделка», а не заглушка. Я стараюсь избегать их, как чумы, потому что вам технически приходится писать для них единичные тесты, чтобы обеспечить их предсказуемость. Возможно, я не понимаю вашу проблему правильно, но я бы написал два теста и использовал два разных заглушки. Один заглушка будет где ': uid' = 0, в другом тесте будет использоваться заглушка, где значение': uid' будет больше или равно 1. –

ответ

0

Похоже, что вы должны урезать конкретный экземпляр, а не сам класс.

User.where.not(uid: 1).each do |user| 
    user.stubs(:streak).returns([8,10]) 
end 

Или, может быть (я не могу сказать наверняка, не больше контекста), вы могли бы оптимизировать это просто делая:

node.author.stubs(:streak).returns([8,10]) 
+0

Я пробовал это раньше. Он не будет работать, поскольку экземпляры, используемые во время рендеринга, отличаются от обрезанных экземпляров. Поэтому нам нужно специально заглушить экземпляры класса с помощью 'uid'. – ananyo2012

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