Ruby on rails 通过rake进行钢轨测试:don';不要碰我的开发数据库

Ruby on rails 通过rake进行钢轨测试:don';不要碰我的开发数据库,ruby-on-rails,unit-testing,Ruby On Rails,Unit Testing,我想让“raketest:units”在我的开发数据库关闭时在准备好的测试数据库上成功地运行测试。目前rails正在尝试从开发数据库构建测试数据库。这可能吗 我的prod/dev数据库脱离主机,但为了进行单元测试,我使用了一个sqlite内存数据库 编辑我的确切操作:注意,我使用的是Rails 2.3 我的测试数据库在config/database.yml中的设置如下: test: adapter: sqlite3 database: 'sqlite3_unittest_file.dat

我想让“raketest:units”在我的开发数据库关闭时在准备好的测试数据库上成功地运行测试。目前rails正在尝试从开发数据库构建测试数据库。这可能吗

我的prod/dev数据库脱离主机,但为了进行单元测试,我使用了一个sqlite内存数据库

编辑我的确切操作:注意,我使用的是Rails 2.3

我的测试数据库在config/database.yml中的设置如下:

test:
  adapter: sqlite3
  database: 'sqlite3_unittest_file.dat'
  pool: 5
  timeout: 5000
当我运行
rakedb:test:load
时,测试数据库(只是一个文件)在rails根目录中正确生成。当我运行raketest:units时,一切都正常

现在,如果我编辑
database.yml
将我的DEV-database用户名设置为错误(如'sdlkfj'),
rake-test:units
会立即失败:

Access denied for user 'sdlkfj'@'myhostnsmae' (using password: YES)

当我“真正地”运行这个构建时,我是在一个系统中运行它的,在这个系统中,构建在构建过程中是不允许随意讨论的。因此,这种试图与开发人员数据库对话并立即发出嘎嘎声的做法简直要了我的命,而且似乎不正确。

尝试在显式环境下运行rake任务:

rake test:units RAILS_ENV=test

根据我的经验,如果不指定环境,
开发
。虽然测试数据库仍然将夹具数据插入其中,但由于某些原因,
开发
环境中的内容仍然会被引用。

失败的原因是“rake test:units”试图首先确保测试数据库设置正确。为了做到这一点,它调用“rake db:test:prepare”,从dev数据库复制当前模式(我想这是为了确保在运行测试之前所有迁移都已运行)


我想您可以通过几种方法来解决这个问题,其中一种方法是覆盖rake任务“db:test:prepare”,这是在stackoverflow上提出的。

通常您的测试应该在没有运行开发数据库的情况下工作。你应该看看第3.1节,改变你的问题,这样你就可以说出你所做的步骤。一开始似乎需要开发数据库,但你没有。编辑以添加更多信息。嗯,我的意思是,这个答案已经有8年了。我确信它在Rails2.x上很早以前就在这个特定的例子中起作用了。