今天在做单元测试时发现一个小问题,就是如果运行多个测试类,会因为外键问题无法删除测试数据导致测试失败.如下:
测试类一
ruby 代码
- require File.dirname(__FILE__) + '/../test_helper'
-
- class ShareTest < Test::Unit::TestCase
- self.use_transactional_fixtures = true
- fixtures :users,:share_catagories,:shares
-
- def test_last_shares
- assert_not_nil Share.last_shares(5)
- end
-
- end
测试类二
ruby 代码
- require File.dirname(__FILE__) + '/../test_helper'
-
- class BlogTest < Test::Unit::TestCase
- self.use_transactional_fixtures = true
- fixtures :users,:blogs,:blog_members
-
- def test_hearty_seniority
- assert_not_nil Blog.hearty_seniority(2)
- end
-
- end
表间关系:
user 与 blog 是一对一,blog与 blog_members是一对多,
share_catagories与shares也是一对多,user与shares也是一对多
问题症状:
如果先运行ShareTest,测试通过.再运行BlogTest时夹具在测试方法运行前初始化数据,实际上是删除表再建表的一个过程,但因为前面运行过ShareTest了,此时在对user表初始时就会发生有外键引用(shares),无法初始化(fixtures),导致测试失败.
解决方法:
将表间的外键关系删除.
这个问题到也不是什么大问题,后来看了一下typo的建表脚本,确实是没有外键,但有点想不明白,难道在设计数据库时不需要用到外键?还是说在测试时将外键删除掉,正式发布时还在用带有外键的脚本建表.typo已经是一个可以放在生产环境下使用的系统了,它就不需要外键,全部通过程序控制?或者说在Model里定义表关联时用dependent参数来保证外键?
我个人也不喜欢使用各种数据库自有的特性,但外键却是大多数数据库支持的东西,如果仅是因为测试而去除这个强大的功能,好像有点........
分享到:
- 2007-02-03 00:10
- 浏览 3100
- 评论(4)
- 论坛回复 / 浏览 (4 / 3769)
- 查看更多
相关推荐
combustion, 简单,优雅的Rails 引擎测试 燃烧in是一个以简单有效的方式测试 Rails 引擎的库,而不是在规范或者测试文件夹中创建完整的Rails 应用。它允许你在引擎的上下文中编写你的规格,只使用你需要的Rails 应用...
使用RSpec 测试Rails 程序.pdf
API Taster - 一种快速而简单的方法来可视化测试你的Rails应用API
主要介绍了在Ruby on Rails中进行高效的单元测试的教程,使用到了Ruby的RSpec和Factory Girl框架,需要的朋友可以参考下
testfixtures - 一个辅助工具用于实现类似Rails的测试装置来测试数据库应用程序
RSepc框架是一个rails下的测试框架。该文档内含实例及github地址。
简化代码:力图让每个方法都很小,只专注一件事;优化代码:当测试代码写不出来,或者需要写很长的时候,说明代码是有问题的,是可以被分解的,需要进一步优化; 便于扩展:当扩展新业务或修改旧业务时,如果测试代
Rails的A/B测试
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
Ajax、Prototype和Scriptaculous等JavaScript代码库和RJS,Session管理、用户登录和认证系统,XML和ActiveResource,后台处理和ActionMaile,测试和specs(包括RSpec on Rails和Selenium),安装、管理、编写插件,...
学习rails和ruby的好教程。赶快下吧!
一个用Ruby on Rails搭建的图片分享的网站项目.完整源代码
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...
Vanity - 一个Rails的A/B测试框架,它是数据存储无关。
很不错的入门文档,适合初学者直接入门。
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
rails-perftest, 测试和配置你的Rails 应用程序 性能测试 Rails 应用程序本指南介绍了 Ruby on Rails 应用程序性能测试的各种方法。阅读本指南后,你将知道:各种类型的基准测试和分析度量。如何生成性能和基准测试...