2015-08-15 2 views
5

У меня есть вспомогательный файл в app/helpers/sessions_helper.rb, который включает в себя метод my_preference, который возвращает предпочтение текущего пользователя. Я хотел бы иметь доступ к этому методу в тесте интеграции. Например, чтобы я мог использовать get user_path(my_preference) в своих тестах.Как сделать вспомогательные методы доступными в тесте интеграции Rails?

В других сообщениях, которые я читал, это можно включить, включив в тестовый файл require sessions_helper, но я все еще получаю сообщение об ошибке NameError: undefined local variable or method 'my_preference'. Что я делаю не так?

require 'test_helper' 
require 'sessions_helper' 

class PreferencesTest < ActionDispatch::IntegrationTest 

    test "my test" do 
    ... 
    get user_path(my_preference) 
    end 

end 

ответ

7

Ваша ошибка messagae говорит:

NameError: undefined local variable or method 'my_preference' 

, который означает, что вы не имеете доступа к my_preference методу. Чтобы сделать это доступным в вашем классе, вы должны использовать include модуль в своем классе.

Вы должны включить ваш модуль: SessionsHelper в ваш класс PreferencesTest.

include SessionsHelper 

Затем метод экземпляра my_preference будет доступен для использования в тесте.

Итак, вы хотите сделать:

require 'test_helper' 
require 'sessions_helper' 


class PreferencesTest < ActionDispatch::IntegrationTest 

    include SessionsHelper 

    test "my test" do 
    ... 
    get user_path(my_preference) 
    end 

end 
+0

Спасибо, это работает! Теперь он также работает, если я не буду «требовать» session_helper''. Имеет ли это смысл? Требуется ли 'session 'session_helper''? – Marty

+0

Да, вам не нужно, чтобы это было в каталоге 'app/helpers' , дайте мне знать! –

1

В случае, если кто хочет иметь особые вспомогательные методы, доступные во всех тестах, можно включить вспомогательные модули в test_helper.rb файле:

class ActiveSupport::TestCase 
... 
include SessionsHelper 
end 
Смежные вопросы