2017-06-27 5 views
2
require_relative File.expand_path '../../test_helper',__FILE__ 

FactoryGirl.define do 
    factory :task do 
    name "testinga again" 
    finished 0 
    end 
end 


class TaskTest < Test::Unit::TestCase 

    include FactoryGirl::Syntax::Methods 

    test "should not save tasks without title" do 
    task = Task.new 
    assert_equal false, task.save 
    end 

    test "should save tasks" do 
    task = FactoryGirl.create(:task) 
    assert_equal attributes_for(:task), task 
    end 

end 

Ich möchte den Task Creation-Prozess testen. In der should save task Aufgabe habe ich den Wert in der DB gespeichert, jetzt möchte ich prüfen, ob der gespeicherte Wert dem entspricht, was ich wirklich an die Datenbank gesendet habe. Wie mache ich das oder mache ich es richtig?write unit test zum Speichern von Daten in db

Antwort

2

Zuallererst versuchen Sie, Sachen zu überprüfen, die bereits von branchenführenden Ingenieuren getestet wurden. Wenn Sie das Projekt sehen, wurde jede API streng getestet. Also ich empfehle Ihnen, dies zu überspringen.

Aber, wenn Ihr Zweck UnitTesting zu lernen ist, dann tun Sie es wieder falsch. Unittest ist ein Black-Box-Test. Sie sollten in Ihrem Fall keine anderen Klassen oder Drittanbieter-Software/Dienste wie Database aufrufen/aufrufen.

Lässt sich dies einen Integrationstest nennen.


ich testen wollen, ob der gespeicherte Wert gleich ist, was ich wirklich zu hat dem db

Es ist einfach; siehe:

test "should save tasks" do 
    task = FactoryGirl.build(:task, name: 'John') 
    task.save 
    assert_equal 'John', task.reload.name 
    end 

reload holt den Datensatz aus der Datenbank.

+0

Was ist, wenn ich 'FactoryGirl.build testen will (: Aufgabe, Name: 'John, fertig: 0')'? – Raaz