Wow*_*Bow 2 testing ruby-on-rails rails-migrations ruby-on-rails-3
类似的问题已被问到很多.但是,我认为我的情况有点不同.我从Heroku(我在prod中使用sqlite3)向我的本地机器(使用PostgreSQL)中提取了一个数据库.prod db当时没有任何数据.
在那之后,我还没有进行任何db迁移来测试.现在我在dev db中有几个字段.但是,当我去测试控制台看看我有什么(引用User表)时,User.count返回0,但在dev中返回2个用户.
所以我做了rake db:migrate RAILS_ENV=test既没有错误信息也没有成功信息.我认为这是成功的,并检查测试数据库是否有这2个用户,但仍然没有.然后我试了一下bundle exec rake db:test:prepare.这是输出
**You have 4 pending migrations:
20120415210441 CreateUsers
20120418064930 AddIndexToUsersEmail
20120419034627 AddPasswordDigestToUsers
20120504031144 AddRememberTokenToUsers
Run `rake db:migrate` to update your database then try again.**
Run Code Online (Sandbox Code Playgroud)
解决办法是什么?
编辑: 仅供参考:我正在使用Windows我也运行rake db:migrate 并且我收到了此错误.
$ rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
rake aborted!
An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table "users" already exists: CREATE TABLE "users" ("id"
INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varcha
(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
该错误消息表明您的开发和测试迁移不同步.
首先在dev上运行迁移.这将使用您最近的所有迁移更新dev.
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
然后运行db:test:prepare.这将使测试数据库与dev具有相同的模式.
rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
现在,了解db:test:prepare make test与dev具有相同的模式,但没有记录.要在测试中填充记录,请实现夹具或工厂(请参阅factory-girl gem).通常在测试中调用工厂来为该测试创建记录.
| 归档时间: |
|
| 查看次数: |
3141 次 |
| 最近记录: |