rake测试fixtures数据加载相关
在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命令执行某个测试文件时,如果发现文件中如下类似的代码时:
...省略...?????????? 那么,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
?
?