2016-08-01 4 views
1

У меня возникли проблемы с тестированием определенных почтовых индексов в определенных адресах. У меня есть проблема, которая наследуется и проверяется в модели. Он исправляет еще одну проблему, когда пользователи вводят почтовые индексы по умолчанию, которые не соответствуют состояниям, в которых они находятся. Однако мне в конечном итоге необходимо выполнить миграцию, чтобы исправить любые почтовые коды, которые были испорчены до этого момента. Это подводит меня к моей проблеме. Есть ли способ протестировать конкретную проблему или метод, написанный в этой проблеме через консоль?Как протестировать метод рельсов через консоль рельсов

Моя забота ниже.

module StateMatchesZipCodeConcern 
    extend ActiveSupport::Concern 

    def verify_zip_matches_state 
    return unless zip.present? && state.present? 

    state_search_result = query_zip_code 

    unless state_search_result.nil? 
     return if state_search_result.upcase == state.upcase 
     return if validate_against_multi_state_zip_codes 
    end 
    errors[:base] << "Please verify the address you've submitted. The postal code #{zip.upcase} is not valid for the state of #{state.upcase}" 
    false 
    end 

    private 

    def query_zip_code 
    tries ||= 3 
    Geocoder.search(zip).map(&:state_code).keep_if { |x| Address::STATES.values.include?(x) }.first 
    rescue Geocoder::OverQueryLimitError, Timeout::Error 
    retry unless (tries -= 1).zero? 
    end 

    def validate_against_multi_state_zip_codes 
    ::Address::MULTI_STATE_ZIP_CODES[zip].try(:include?, state) 
    end 
end 

Я попытался User.last.address.validate_against_multi_state_zip_codes? и ветер с методом отсутствует. Кто-нибудь знает, чего мне здесь не хватает?

ответ

3

Я предполагаю, что вы включили StateMatchesZipCodeConcern в свою модель User.

Это означает, что метод validate_against_multi_state_zip_codes будет методом на User экземплярах.

Вы пытаетесь вызвать этот метод при возврате метода , который является тем, что выбрасывает NoMethodError. Кроме того, вы сделали этот метод private, так что вы все равно не сможете его назвать.

Поместите метод выше private линии в модуле и назовем его так: User.last.validate_against_multi_state_zip_codes?

+0

Вы удивительны! Спасибо огромное! – kdweber89

+1

http://i.imgur.com/9ld8MlW.gif – DiegoSalazar

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