Mam model SearchTerm.
class SearchTerm < ActiveRecord::Base
belongs_to :location
validates :keyword, presence: true
def self.hit(keyword)
search_term = find_by(keyword: keyword) || new(keyword: keyword)
if search_term.new_record?
location_hash = Location.parse_address(keyword)
location = Location.find_or_create_by(location_hash)
search_term.location = location
end
search_term.hits += 1
search_term.save
search_term
end
end
Chcę napisac jeden test tej metody .hit, w którym sprawdzałbym czy Location.parse_address było odpalone czy nie, czyli coś w stylu:
it "opis ..." do
SearchTerm.hit("Poland")
expect(Location).to receive(:parse_address)
end
i drugi test jak nie ma w bazie wyszukiwan “Poland” zeby bylo .to_not receive(:parse_address)
Ten expect mi nie działa, ale coś czuję, że jakoś inaczej powinienem go skonstruować, bo skąd niby ma wiedzieć ,że chodzi o tą metodę. Jak to zrobić?
I drugie pytanie (chyba o stuby, double - srednio to ogarniam), ale Location.parse_address wysyla zapytanie do google maps, a przy testach chcialbym to ominac i na sztywno ustalic, ze np. dla Location.parse_address(“Poland”) zwrocilo {city: nil. state: nil, country: “Poland”} - gdzie i jak to ustawic?