背景:
明星和管理员,多对多
共有3个表:admins,stars,admins_stars,关联表admins_stars只有两个字段:star_id,admin_id
以一个测试用例作为说明
开头:
测试读:
测试新增:
测试修改:
测试删除:
注意:
Admin.destroy[ 1 , 2 ]是一条条删除纪录
Admin.delete[ 1 , 2 ]批量 删除,但在本例中会违反外键约束, delete看来比较适合独立的表的批量删除
明星和管理员,多对多
class
Admin
<
ActiveRecord::Base
has_and_belongs_to_many:stars
end
has_and_belongs_to_many:stars
end
class
Star
<
ActiveRecord::Base
......
has_and_belongs_to_many:admins
......
end
......
has_and_belongs_to_many:admins
......
end
共有3个表:admins,stars,admins_stars,关联表admins_stars只有两个字段:star_id,admin_id
以一个测试用例作为说明
开头:
requireFile.dirname(__FILE__)
+
'
/../test_helper
'
class AdminTest < Test::Unit::TestCase
fixtures:admins,:agents,:stars,:admins_stars
defsetup
@admin = Admin.find( 1 )
end
....
class AdminTest < Test::Unit::TestCase
fixtures:admins,:agents,:stars,:admins_stars
defsetup
@admin = Admin.find( 1 )
end
....
测试读:
deftest_read
assert_equal 1 ,@admin.id
assert_equal " 1 " ,@admin.nick_name
assert_equal 2 ,@admin.stars.length
assert_equal " 谭咏麟 " ,@admin.stars[ 0 ].name_cn
end
assert_equal 1 ,@admin.id
assert_equal " 1 " ,@admin.nick_name
assert_equal 2 ,@admin.stars.length
assert_equal " 谭咏麟 " ,@admin.stars[ 0 ].name_cn
end
测试新增:
deftest_create
new_admin = Admin. new
new_admin.login_name = " aa "
new_admin.nick_name = " bb "
new_admin.star_ids = [ 2 , 3 ]
new_admin.save
new_admin = Admin.find(new_admin.id)
assert_equal 2 ,new_admin.stars.length
end
new_admin = Admin. new
new_admin.login_name = " aa "
new_admin.nick_name = " bb "
new_admin.star_ids = [ 2 , 3 ]
new_admin.save
new_admin = Admin.find(new_admin.id)
assert_equal 2 ,new_admin.stars.length
end
测试修改:
def test_update
assert_equal 2,@admin.stars.length
assert_equal 1,@admin.stars[0].id
assert_equal 2,@admin.stars[1].id
@admin.star_ids=[3]
@admin.nick_name="aa"
@admin.save
@admin = Admin.find(1)
assert_equal 1,@admin.stars.length
assert_equal 3,@admin.stars[0].id
end
assert_equal 2,@admin.stars.length
assert_equal 1,@admin.stars[0].id
assert_equal 2,@admin.stars[1].id
@admin.star_ids=[3]
@admin.nick_name="aa"
@admin.save
@admin = Admin.find(1)
assert_equal 1,@admin.stars.length
assert_equal 3,@admin.stars[0].id
end
测试删除:
deftest_delete
assert_equal 4 ,Admin.find(:all).length
Admin.destroy[ 1 , 2 ]
assert_equal 2 ,Admin.find(:all).length
end
assert_equal 4 ,Admin.find(:all).length
Admin.destroy[ 1 , 2 ]
assert_equal 2 ,Admin.find(:all).length
end
注意:
Admin.destroy[ 1 , 2 ]是一条条删除纪录
Admin.delete[ 1 , 2 ]批量 删除,但在本例中会违反外键约束, delete看来比较适合独立的表的批量删除