在rails中执行rake测试时,测试数据是在app_name\test\fixtures中准备好的(基本上和app_name\app\models中的model是对应的)。
那么在执行rake命令时,fixtures中的数据是怎样加载的呢?
1、加载时间:
①执行rake命令:
[12:34:30 root@rap app_name]$rake --trace
或者 (只测试units部分)
[12:34:30 root@rap app_name]$rake test:units --trace
或者 (只测试functionals部分)
[12:34:30 root@rap app_name]$rake test:functionals --trace
②在执行rake测试命令后:
首先,rails会清空app_name\config\database.yml中test区段配置的数据库;
然后,rails会将database.yml中development区段所配置数据库中的所有表结构导入至test区段配置的数据库;
然后,rails准备好测试数据库的数据结构后,rake命令开示执行具体的测试case;
然后,在rake命令执行某个测试文件时,如果发现文件中如下类似的代码时:
fixtures :modelones, :modeltwos, :modelthrees
...省略...
那么,rails就向测试数据库中开始导入fixtures目录中的modelones.yml,modeltwos.yml,modelthrees.yml数据了。
③在执行rake测试过程中所有具体测试case对测试数据库的增删改操作都是即时的,不会被commit的;
也就是说具体测试case对测试数据库的增删改操作完成后都是被回滚的。
因此在执行完rake测试后你会发现测试数据库中的数据和fixtures目录中准备的数据一模一样。
④最后需要注意的一点是:
如果只是按照命令执行某一个测试case↓时,会直接利用现有测试数据库数据,而不会去清空数据库然后再重新导入。
[12:34:30 root@rap app_name]$ruby test/unit/filename -n testcasename
[12:34:30 root@rap app_name]$ruby test/functional/filename -n testcasename