class Part < ActiveRecord::Base def after_create raise "no way" if self.name == "test" end end
app/controllers/parts_controller.rb
class PartsController < ApplicationController def test Part.create!(:name => "test") end end
test/functional/parts_controller_test.rb
require File.dirname(__FILE__) + '/../test_helper' class PartsControllerTest < ActionController::TestCase def test_test old_count = Part.count post :test rescue nil assert_equal(old_count, Part.count) end end
ruby test\functional\parts_controller_test.rb
结果是
<2> expected but was <3>.
日志是
Processing PartsController#test (for 0.0.0.0 at 2008-05-01 16:26:57) [POST] Session ID: Parameters: {"action"=>"test", "controller"=>"parts"} [4;35;1mPart Create (0.000000)[0m [0mINSERT INTO parts ("name", "updated_at", "created_at") VALUES('test', '2008-05-01 16:26:57', '2008-05-01 16:26:57')[0m [4;36;1mSQL (0.000000)[0m [0;1mSELECT count(*) AS count_all FROM parts [0m
看到没. 居然没有 回滚
换用集成测试
test/integration/model_hg_test.rb
require "#{File.dirname(__FILE__)}/../test_helper" class ModelHgTest < ActionController::IntegrationTest fixtures :parts def test_truth old_count = Part.count puts Part.find_by_sql("select * from parts").collect(&:id).join(", ") puts Part.find_by_sql("select * from parts").collect(&:name).join(", ") post '/parts/test' puts Part.find_by_sql("select * from parts").collect(&:id).join(", ") puts Part.find_by_sql("select * from parts").collect(&:name).join(", ") assert_equal(old_count, Part.count) end end
结果是
D:\t1\t1>ruby test\integration\model_hg_test.rb Loaded suite test/integration/model_hg_test Started 953125641, 996332877 MyString, MyString 953125641, 996332877, 996332878 MyString, MyString, test F Finished in 1.281 seconds. 1) Failure: test_truth(ModelHgTest) [test/integration/model_hg_test.rb:17:in `test_truth' E:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:547:in ` ']: <2> expected but was <3>. 1 tests, 1 assertions, 1 failures, 0 errors
没有 回滚
狂汗!!!