今天在做单元测试时发现一个小问题,就是如果运行多个测试类,会因为外键问题无法删除测试数据导致测试失败.如下:
测试类一
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
- 浏览 3128
- 评论(4)
- 论坛回复 / 浏览 (4 / 3796)
- 查看更多
相关推荐
单元测试和功能测试是Rails中两种主要的测试类型,它们在目的、范围和实现方式上有所不同。本文将详细探讨Rails中单元测试和功能测试的区别,并提供实际代码示例。 单元测试和功能测试是Rails测试策略的两个重要组成...
将RSpec与Rails相结合可以有效地进行单元测试、集成测试以及端到端测试,从而确保应用程序的质量。 ##### 为什么使用RSpec? - **可读性高**:RSpec提供了清晰易懂的DSL(领域特定语言),使得测试代码更容易理解...
combustion, 简单,优雅的Rails 引擎测试 燃烧in是一个以简单有效的方式测试 Rails 引擎的库,而不是在规范或者测试文件夹中创建完整的Rails 应用。它允许你在引擎的上下文中编写你的规格,只使用你需要的Rails 应用...
Ruby-APITaster是一款强大的工具,专为Rails应用的API测试和可视化设计。它使得开发者能够迅速地对API接口进行互动式测试,从而确保API的功能正确性和性能稳定性。这款工具的出现,极大地简化了API测试过程,提高了...
RSepc 是一款基于 Ruby 的行为驱动开发(BDD)测试框架,它被广泛应用于 Rails 应用程序的测试。RSpec 提供了一种清晰且简洁的方式来编写可读性强的测试代码,使得测试用例更像是对软件行为的规范描述,而不是简单的...
7. **Testing**:Rails强调测试驱动开发,内置了RSpec、Minitest等测试框架,支持单元测试、集成测试和功能测试,确保代码质量。 8. **Asset Pipeline**:Rails的资产管道处理JavaScript、CSS和图像等静态资源,...
这一章节将教授如何使用Rails的测试框架进行单元测试、集成测试和功能测试。同时,也会介绍如何对应用进行基准测试,评估其性能表现。 #### 12. Deployment and Production Use(部署和生产使用) 最后,本书将...
Rails鼓励TDD(测试驱动开发),包括单元测试、集成测试和功能测试。RSpec、Capybara等库可以帮助编写和运行这些测试,确保代码质量。 这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手...
通过深入分析不同测试方法(如单元测试、集成测试等)之间的优缺点,帮助读者理解何时以及为何应选择特定类型的测试。 2. **Mocking与Stubbing详解**:对于新接触测试驱动开发(TDD)的开发者来说,本书对Mocking和...
在开发过程中,Rails还提供了TDD(测试驱动开发)的支持,其内建的测试框架Rspec和MiniTest允许开发者编写单元测试、集成测试和功能测试,确保代码的质量和稳定性。 总之,Rails入门教程一将涵盖Rails的基础知识,...
- 测试安装: 创建一个简单的Rails应用来验证是否成功安装。 #### 五、练习作业0-Hello World - **目标**: - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器...
通过这种方式,Cucumber-Rails帮助团队确保代码按照预期运行,同时提供了一种非技术人员也能理解的测试文档。 在`support`目录下,开发者可以放置一些辅助文件,例如World类(用于扩展Cucumber的上下文)、Hooks...
《Ruby on Rails应用程序测试指南》深入解读 一、为何为Rails应用编写测试?...从理论到实践,从单元测试到集成测试,这份指南都提供了详尽的指导,是任何希望提升Rails应用稳定性和可维护性的开发者不可或缺的参考。
- **模拟(Mocking)**:模拟是一种技术,用于模拟对象的行为,特别是在单元测试中用来替代外部依赖项。它可以帮助开发者更准确地测试单个组件的功能,而不会受到其他部分的影响。 - **存根(Stubbing)**:存根则是替换...
Rails集成了测试框架如RSpec和MiniTest,允许开发者编写单元测试、集成测试和功能测试,确保代码的稳定性和可靠性。 安全方面,Rails提供了许多安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站脚本)防御、以及...