Mam model, którego zadaniem jest pobieranie danych korzystając z SOAPa. Sparsowanych danych nigdzie nie zapisuję permanentnie (pliki/baza). Próbowałem napisać do tego unit testy (które mają być odpalane przez rake), ale nie wiem, jak to zrobić kiedy nie korzystam w modelu z bazy danych. Czy w ogóle unit testy są odpowiednie do tego zadania ? Jeśli tak, to jak je napisać, odpalać ?
Ja muszę lecieć na autobus, więc się nie rozpiszę, ale być może potrzebujesz gema FakeWeb - (ścieżkę na pewno zna google).
Nie ważne, czy korzystasz z bazy czy nie. Masz model? Masz. Model ma metody? Ma. No to możesz te metody testować w unit testach. Na wejściu dajesz modelowi “coś”, on ma zwrócić “inne coś”. I to właśnie testujesz. Dobra lecę…
okej, nie dziedziczy to może dołączasz jakiś moduł? a może źle wywołujesz testy? a może to, a może tamto : ] come on, pokaż jakiś kod, bo tak to możemy zgadywać do usranej śmierci.
class Weather
def find_weather_info(zip_code)
client = Savon.client("url do wsdl")
response = client.request :get_weather_by_zip_code
data = response.to_array(:get_weather_by_zip_code_response, :get_get_weather_by_zip_code_result)
end
end
unit/weather_test.rb
[code]# probowalem tez < Test::Unit::TestCase i zmiane na test => def
class WeatherTest < ActiveSupport::TestCase
def setup @weather = Weather.new
end
test “check sample zip code matches” do
info = @weather.find_weather_info(“00000”)
assert_equal info[:temperature], “20”
assert_equal info[:sun], “full”
end
end[/code]
Jeżeli nie masz żadnych modeli, które korzystają z bazy, to powinieneś w application.rb zamiast:
require 'rails/all'
dać:
require 'action_controller/railtie'
require 'action_mailer/railtie'
require 'sprockets/railtie'
require 'rails/test_unit/railtie'
Możesz to zrobić też przy tworzeniu aplikacji podając argumen -O (alias do --skip-active-record)
rails new foo -O
Jeżeli jednak masz jakieś modele, które korzystają z bazy danych, to musisz utworzyć bazę danych i zrobić dla nich migracje - railsy otwierają kilka połączeń do bazy danych podczas startowania aplikacji, więc nawet jak akurat nie używasz innych modeli w danym teście, to musisz mieć odpowiedni setup.