2013-09-26 4 views
0

Да, я знаю, что этот вопрос глупый, новичок и прост, но я до сих пор не могу понять это. Я создал класс (in app/minions/), чтобы разобрать хеши аутентификации из сторонних сервисов (например, Google, Twitter и т. Д.). Похоже на это.Rails: тестирование пользовательских классов с RSpec

class AuthHash 

    def initialize(hash) 
    @hash = hash 
    @provider = hash[:provider] 
    @uid = hash[:uid] 
    create_user_hash 
    end 

def create_user_hash 
    @user_hash = send("parse_hash_from_" << @hash[:provider], @hash) 
end 

def credentials 
    {provider: @provider, uid: @uid} 
end 

def user_hash 
    @user_hash 
end 

private 

    # parse_hash_from_* methods here 

end 

Я добавил этот каталог в путь автозагрузки, поэтому я могу использовать его в своих контроллерах. Теперь я хочу написать несколько тестов для этого.

Я использую RSpec с FactoryGirl для тестирования. Поэтому я начал с добавления фабрики в spec/factories/ под названием auth_hashes.rb, но я не могу определить хэш как поле на заводе. Поэтому я переместил объявление на spec/minions/auth_hash_spec.rb.

require 'spec_helper' 

describe AuthHash do 
    before_each do 
    auth_hash = AuthHash.new({:provider=>"google_oauth2",:uid=>"123456789",:info=>{:name=>"JohnDoe",:email=>"[email protected]_name.com",:first_name=>"John",:last_name=>"Doe",:image=>"https://lh3.googleusercontent.com/url/photo.jpg"},:credentials=>{:token=>"token",:refresh_token=>"another_token",:expires_at=>1354920555,:expires=>true},:extra=>{:raw_info=>{:id=>"123456789",:email=>"[email protected]",:verified_email=>true,:name=>"JohnDoe",:given_name=>"John",:family_name=>"Doe",:link=>"https://plus.google.com/123456789",:picture=>"https://lh3.googleusercontent.com/url/photo.jpg",:gender=>"male",:birthday=>"0000-06-25",:locale=>"en",:hd=>"company_name.com"}}}) 
    end 
end 

Но все же это не работает.

Я знаю, что это должно быть намного проще, чем я пытаюсь сделать, но я не могу понять это.

ответ

1

Добавить что-то подобное для этой новой спецификации файла (spec/minions/auth_hash_spec.rb) в верхней части:

require Rails.root.to_s + '/app/minions/myhash.rb' 

А потом писать тесты.

+0

Могу я просто добавить 'require 'auth_hash'', так как он находится в пути автозагрузки? – Almaron

+0

Если вы не настроите Rails на автозагрузку своего нового каталога, он не будет автоматически загружать его. См. Это. http://stackoverflow.com/questions/4073856/rails-3-autoload – nathanengineer

+0

Вы прочитали мой комментарий и вопрос? Я сделал это для автозагрузки. Итак, да, просто попросту нужно работать. Но я, однако, должен быть способ переместить декларации прототипов из теста на какой-то завод. – Almaron

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