将Sinatra app的测试数据库与开发数据库分开?

时间:2012-02-21 10:59:34

标签: rspec sinatra datamapper

作为一项学习练习,我正在使用Sinatra,Datamapper和RSpec构建练习应用程序。我正在使用this template,它基本上是上述所有内容的样板。

我遇到的问题是RSpec和Datamapper的配置方式,每次运行测试数据库相关功能的规范时,这些测试都会直接更改我的开发数据库而不是测试数据库。

例如,我希望在运行规范的其余部分之前创建一些数据库对象...

before(:all) {
  Region.new(:country => "Canada", :country_code => "CA").save
  ProductLine.new(:reference => "Molders").save
  Product.new(:name => "The Black Molder").save
  Cart.new(:price => 25.95).save
}

然而,每次运行RSpec时,上述元素都会添加到我的开发数据库中。

为什么不生成测试数据库?如何让测试数据库正常工作?

除了Sinatra而不是Rails之外,这看起来与this issue here非常相似。

如果有任何帮助,可以看到我的代码here

1 个答案:

答案 0 :(得分:16)

spec_helper.rb文件中,您需要my_app.rb文件,而这需要db.rb来设置您的数据库,但这会在发生之前发生 {{1}因此,set :environment, :test块未运行(环境是该阶段的默认开发)。

当然,在您需要Sinatra之前无法调用configure :test,但您可以设置set environment :test环境变量,Sinatra会在设置环境时进行检查。

因此,为了确保您在测试环境中运行,请将其添加到RACK_ENV的顶部(或在测试开始时的其他位置,但在您需要Sinatra之前):

spec_helper.rb

然后您可以移除ENV['RACK_ENV'] = 'test' 行,因为它现在已经多余了。

这与您引用的其他问题类似,但机架应用使用set :environment, :test代替RACK_ENV