Witam wszystkich,
mam aplikację, w której jest sobie ticket, który ma_wiele wiadomości. Usuwając ticket, naturalnie powinny się usunąć wszystkie jego wiadomości. Niestety tego nie robiły. Problem prosty do naprawienia, ale za nic nie potrafię napisać do tego testu… Jak sprawdzić, czy usunięte zostały obiekty, do których odwoływałem się przez usunięty obiekt?
Pozdrawiam i z góry dzięki za pomoc,
Yax
ja bym napisał to w ten sposób (używając shouldy):
should_have_many :messages, :dependent => :destroy
context 'when destroying ticket' do
setup do
@ticket = Ticket.last
@ticket.destroy
end
should_change 'Ticket.count', :by => -1
should_change 'Message.count', :by => -1
end
zakładając ofc, że dany ticket miał przypisaną jedną wiadomość.
Na przykład tak:
[code=“Ruby”]# app/models/ticket.rb
class Ticket < ActiveRecord::Base
has_many :messages, :dependend => :destroy
end
spec/models/ticket_spec.rb
describe Ticket do
it “should delete associated messages after deleting ticket” do
@ticket = Factory(:ticket)
@message = Factory(:message, :ticket => @ticket)
@ticket.destroy
lambda do
@message.reload
end.should raise(ActiveRecord::RecordNotFound)
end
end[/code]
Dziękuję za odpowiedzi Ja w końcu zrobiłem to tak:
context "on DELETE to #destroy" do
setup do
@all_messages_qty = Message.count
@ticket_messages_qty = Ticket.find(:first).messages.count
delete :destroy, :id => Ticket.find(:first).to_param
end
should_change("the number of tickets", :by => -1) { Ticket.count }
should_redirect_to("index") { tickets_url }
should_set_the_flash_to /destroyed/
should "destroy its messages" do
assert_equal @all_messages_qty-@ticket_messages_qty, Message.count
end
end