有没有办法在开发环境中“rake db:migrate”之后自动拥有“rake db:migrate RAILS_ENV = test”?

时间:2011-08-03 16:31:16

标签: ruby-on-rails-3 testing rspec2 guard

在开发环境中,有没有办法在每个rake db:migrate RAILS_ENV=test之后自动执行rake db:migrate

我已经 guard guard-rspec 正在运行,即使它在浏览器中手动运行,我对失败的测试感到非常恼火

每次我从开发中暂停时至少花费15分钟,以确定我在更改数据库后忘记调用rake db:migrate:test

由于我已经在使用 guard ,我还考虑过将 guard-rake 添加到项目中,但我不知道应该看哪个文件。在观看 development.sqlite3 时,每次我通过浏览器对记录执行操作时都会触发rake db:migrate RAILS_ENV=test,所以这不是我想要的。

有人可以帮我解决我的问题吗?

7 个答案:

答案 0 :(得分:18)

可能只是在.bashrc文件中创建命令别名。

〜/ .bashrc中

alias rake_db_migrate='rake db:migrate db:test:prepare'

终端

$ rake_db_migrate

答案 1 :(得分:3)

我更喜欢这样使用别名:

~/.bashrc

alias migrate='rake db:migrate && rake db:test:prepare'

很容易花30分钟试图找出为什么你的测试没有通过只是为了记住你没有重置数据库。这将解决这个问题。

答案 2 :(得分:3)

我使用这个别名:
alias rake_db_migrate='rake db:migrate && rake db:migrate RAILS_ENV=test'

因为rake db:test:prepare已弃用。

我使用它的原因是因为我们的项目使用了pg_search(postgreSQL)以及structure.sql(而不是schema.rb),并且由于某些原因,运行rake db:migrate不会准备测试数据库。

答案 3 :(得分:2)

更快:alias migrate='rake db:migrate db:test:prepare'(在.bashrc中添加此内容,只会加载Rails一次)

答案 4 :(得分:2)

我非常喜欢的一个选项是覆盖另一个rake脚本中的实际任务。这将在运行迁移后自动调用。像这样,我总是在迁移数据库后创建一个ERD图:

# lib/tasks/database.rake
namespace :db do
  desc 'Additional migrate task that creates the diagram'
  task :migrate do
    if Rails.env.development?
      Rake::Task['diagram:erd'].invoke
    end
  end
end

所以在你的情况下:

# lib/tasks/database.rake
namespace :db do
  desc 'Additional migrate task that creates the diagram'
  task :migrate do
    `rake db:migrate RAILS_ENV=test`
  end
end

另一种方法是运行以下方法,将新模式克隆到测试数据库:

rake db:migrate db:test:clone

答案 5 :(得分:0)

在回答您使用guard-rake的原始问题时,您可以观看db/schema.rb,因为每次迁移数据库时都会更新。但是,如果您执行回滚,也会更改此文件,因此您可能必须从db/schma.rb中的架构定义行中提取迁移版本,或使用rake db:test:prepare而不是rake db:migrate RAILS_ENV=test

看起来这很脆弱,所以使用shell别名可能是更好的方法。我只是希望有更好的方法!

答案 6 :(得分:0)

如果您想将其作为一种行之有效的单线,您可以将其作为:

def test_population(self):
    response = self.get_request("get_info", {"country":"Germany", "continent":"Europe"})
    return json.loads(response.data)

对于回滚有:

echo "alias rake-migrate='rake db:migrate && rake db:migrate RAILS_ENV=test'" >> ~/.zshrc && source ~/.zshrc

然后,直接在终端运行

echo "alias rake-rollback='rake db:rollback && rake db:rollback RAILS_ENV=test'" >> ~/.zshrc && source ~/.zshrc

rake-migrate

注意:这将为 rake-rollback 文件添加别名。 注意 2::如果您这样做,请说终端 1,并使用另一个终端选项卡或 vscode 终端,然后只需在要运行它的终端上运行 ~/.zshrc