Rails: тестирование пользовательских классов с помощью RSpec

Да, я знаю, что этот вопрос глупый, новенький и простой, но я все еще не могу его понять. Я создал класс (каталог in app/minions/) для анализа хэшей аутентификации сторонних сервисов (таких как google, twitter и т. Д.). Это выглядит так.

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=>"john@company_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

Но все равно вроде не работает.

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


person Almaron    schedule 26.09.2013    source источник


Ответы (1)


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

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

А потом напишите свои тесты.

person Natus Drew    schedule 26.09.2013
comment
Разве я не могу просто добавить require 'auth_hash', поскольку он находится в пути автозагрузки? - person Almaron; 26.09.2013
comment
Если вы не настроите Rails для автоматической загрузки нового каталога, он не будет загружать его автоматически. Обратитесь к этому. stackoverflow.com/questions/4073856/rails-3-autoload - person Natus Drew; 26.09.2013
comment
Вы прочитали мой комментарий и вопрос? Сделал на автозагрузку. Итак, да, кажется, работает простое требование. Но я подумал, что должен быть способ переместить объявления прототипа из теста в какую-то фабрику. - person Almaron; 26.09.2013
comment
Я просто проверил, все ли автоматически загружается в / app, создав класс и попытавшись создать его экземпляр. Мне пришлось потребовать, чтобы он создал экземпляр класса. Таким образом, все не загружается автоматически в / app в Rails 3.2.13. Вы используете предыдущую версию Rails? - person Natus Drew; 26.09.2013