IIk heb een probleempje met unittests in ruby on rails (v1.2.3), waar ik niet uitkom. Ik hoop dat iemand hier me daarmee kan helpen.
Ik heb een unittest gemaakt om de klasse 'order' uit mijn model te testen. Deze klasse heeft, naast enkele validaties, ook een aantal velden die worden geupdate na iedere save(). Zo heeft iedere order een of meerdere order_items, en wordt na een save altijd de totale prijs van de order opnieuw uitgerekend.
Nu wil ik ook testen of dat uitrekenen van de totale kosten in enkele situaties goed gaat. Ik heb dus fixtures aangemaakt, die geladen worden in de unittest, en een test geschreven:
Deze test faalt op o.save. Als ik echter vervolgens een console in test mode open (de fixtures staan dan nog in de database), de betreffende order 'find', en save aanroep, werkt het opslaan wel. Van het aanroepen van 'rake test:units --trace' wordt ik ook niets wijzer: in de trace valt namelijk slechts het volgende te zien:
Ik heb geen idee waar ik dit probleem in moet zoeken. Aangezien, met dezelfde fixtures vanuit de console de save wel werkt, en in de trace ook het model niet terug te vinden is. Ergens is er dus iets anders wanneer een unittest wordt gedraaid. Zou iemand mij een duwtje in de juiste richting kunnen geven? Bij voorbaat dank!
Ik heb een unittest gemaakt om de klasse 'order' uit mijn model te testen. Deze klasse heeft, naast enkele validaties, ook een aantal velden die worden geupdate na iedere save(). Zo heeft iedere order een of meerdere order_items, en wordt na een save altijd de totale prijs van de order opnieuw uitgerekend.
Nu wil ik ook testen of dat uitrekenen van de totale kosten in enkele situaties goed gaat. Ik heb dus fixtures aangemaakt, die geladen worden in de unittest, en een test geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| require File.dirname(__FILE__) + '/../test_helper'
class OrderTest < Test::Unit::TestCase
fixtures :clients, :countries, :delivery_addresses, :books, :order_items, :orders
# Sla order 1 op, en kijk of de prijzen correct zijn uitgerekend.
def test_nl_standaard
o = orders(:nl_standaard)
# sla order op, om te verifieren dat save correct werkt en de prijzen opnieuw te laten berekenen.
assert o.save, "failed saving order"
# verifieer de correctheid van de prijs velden.
assert_equal o.price, 637.43, "incorrect order.price"
assert_equal o.subtotal_price, 609.68, "incorrect order.subtotal_price"
assert_equal o.subtotal_shippingcosts, 27.75, "incorrect order.subtotal_shippingcosts"
# verifieer dat destroy() werkt.
assert o.destroy, "failed destroying order"
end
end |
Deze test faalt op o.save. Als ik echter vervolgens een console in test mode open (de fixtures staan dan nog in de database), de betreffende order 'find', en save aanroep, werkt het opslaan wel. Van het aanroepen van 'rake test:units --trace' wordt ik ook niets wijzer: in de trace valt namelijk slechts het volgende te zien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| 1) Failure: test_nl_standaard_prices(OrderTest) [./test/unit/order_test.rb:11]: failed saving order. <false> is not true. 11 tests, 11 assertions, 1 failures, 0 errors rake aborted! Command failed with status (1): [/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby...] /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:719:in `sh' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:726:in `call' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:726:in `sh' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:805:in `sh' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:740:in `ruby' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:805:in `ruby' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake/testtask.rb:117:in `define' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:823:in `verbose' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake/testtask.rb:102:in `define' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `call' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `execute' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `each' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `execute' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:362:in `invoke' /usr/lib/ruby/1.8/thread.rb:135:in `synchronize' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:355:in `invoke' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in `top_level' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in `each' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in `top_level' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1761:in `standard_exception_handling' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1733:in `top_level' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1711:in `run' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1761:in `standard_exception_handling' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1708:in `run' /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/bin/rake:7 /usr/bin/rake:18:in `load' /usr/bin/rake:18 |
Ik heb geen idee waar ik dit probleem in moet zoeken. Aangezien, met dezelfde fixtures vanuit de console de save wel werkt, en in de trace ook het model niet terug te vinden is. Ergens is er dus iets anders wanneer een unittest wordt gedraaid. Zou iemand mij een duwtje in de juiste richting kunnen geven? Bij voorbaat dank!