Takie pytanko, bo mam zagwozdkę, gdzie/jak przetestować poniższą funkcjonalność.
A jest dość prosta (tutaj jeszcze uprościłem):
class Character < ActiveRecord::Base
has_many :char_names, dependent: :destroy
def default_name
self.gender == 'K' ? 'nieznana kobieta' : 'nieznany mężczyzna'
end
def name_for(character)
char_names.where(named_id: character.id).count > 0 ?
char_names.where(named_id: character.id).first.name : character.default_name
end
end
class CharName < ActiveRecord::Base
belongs_to :character
belongs_to :named, class_name: "Character"
end
class CharNamesController < ApplicationController
def create
@charname = current_character.char_names.build(charname_params)
if @charname.save
redirect_to events_path
else
redirect_to character_name_url(current_character.id)
end
end
private
def charname_params
params.require(:char_name).permit(:name, :description, :named_id)
end
end
Czyli ogólnie mówiąc - mamy relację pomiędzy dwoma obiektami typu Character, która umożliwia zapamiętanie przez jedną postać nazwy (i opisu) drugiej postaci.
W praktyce to działa, ale teraz chciałbym dla porządku zrobić do tego testy i nie wiem gdzie. Widzę 3 możliwości:
- w modelu Character (gdzie już jest test dla metody default_name a name_for jest wykonywane z perspektywy postaci),
- w modelu CharName,
- czy całościowy behaviour test dla kontrolera CharNamesController (to oznacza dość dużo operacji, bo trzeba utworzyć a potem zalogować usera, utworzyć kilka postaci, wybrać postać, sprawdzić jak wyświetlana jest nazwa/opis, wysłać formularz). W sumie wolałbym przetestować same klasy + tylko samą poprawność widoków z nazwami i formularzami.
A może w ogóle inaczej rozwiązać tą funkcjonalność?