作为一项学习练习,我正在使用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。
答案 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
。