1

我在 Rails 应用程序中使用 FactoryGirl 而不是 Fixtures。

当我尝试在测试中使用工厂女孩并创建一些测试数据时,它显示为

PG:Error relation "users" doesn't exists(我有一个名为 User 的模型)

但是当我运行rake db:test:clone,然后运行测试时,测试通过了。该rake db:test:clone命令将所有表结构从开发数据库克隆到测试数据库,这解决了问题。

但是有什么办法让我rake db:test:clone在使用 FactoryGirl 时不运行?

或者我错过了什么?

更新 :

我发现了另一件事,我有另一个使用 Rspec 和 FactoryGirl 的应用程序。在运行rake spec --trace命令时执行下面的那个应用程序

** Invoke spec (first_time)
** Invoke db:test:clone_structure (first_time)
** Invoke db:structure:dump (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:structure:dump
** Invoke db:test:load_structure (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:test:purge
** Execute db:test:load_structure
** Invoke db:structure:load (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:structure:load

但在任何新应用程序中,我看到运行时执行以下rake spec --trace

** Invoke spec (first_time)
** Invoke noop (first_time)
** Execute noop
** Execute spec

请建议我错过了什么?

问候

巴兰

4

2 回答 2

1

每次运行 a 时db:migrate,也要运行 a db:test:prepare,因此数据库更改也会反映在您的测试数据库上。

于 2013-01-08T13:14:45.100 回答
0

我找到了解决方案,我们需要在customrake.rake下面创建一个 rake 任务/lib/tasks 并添加行task :spec => 'db:test:prepare',这将确保rake db:test:prepare在运行 Specs 之前执行。

于 2013-01-08T17:09:05.003 回答