Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rspec 单独的Sinatra应用程序';从开发数据库中删除测试数据库?_Rspec_Sinatra_Datamapper - Fatal编程技术网

Rspec 单独的Sinatra应用程序';从开发数据库中删除测试数据库?

Rspec 单独的Sinatra应用程序';从开发数据库中删除测试数据库?,rspec,sinatra,datamapper,Rspec,Sinatra,Datamapper,作为学习练习,我正在使用Sinatra、Datamapper和RSpec构建一个实践应用程序。我正在使用,它基本上是上述所有内容的样板 我遇到的问题是,RSpec和Datamapper的配置方式似乎是,每次运行测试数据库相关功能的规范时,这些测试都会直接更改我的开发数据库,而不是测试数据库 例如,我希望在运行规范的其余部分之前创建一些数据库对象 before(:all) { Region.new(:country => "Canada", :country_code => "CA

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

我遇到的问题是,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之外,这看起来非常类似于


如果有任何帮助,可以查看我的代码。

spec\u helper.rb
文件中,您需要
my\u app.rb
文件,该文件反过来需要
db.rb
来设置数据库,但这发生在您调用
set:environment,:test
之前,因此
configure:test
块没有运行(环境是该阶段的默认开发)

当然,在需要Sinatra之前不能调用
set environment:test
,但可以设置
RACK_ENV
环境变量,Sinatra在设置其环境时会检查该变量

因此,为了确保您在测试环境中运行,请将其添加到
spec\u helper.rb
的顶部(或者在测试开始时的其他地方,但在需要Sinatra之前):

然后可以删除
set:environment,:test
行,因为它现在是多余的


这与您提到的另一个问题类似,但机架应用程序使用的是
rack_ENV
而不是
RAILS_ENV

谢谢,我是在放
ENV['rack_ENV']='test'
在不同的地方进行测试,并对它为什么没有被选中感到沮丧-在阅读了你的答案后,我把它放在了
spec\u helper.rb
之前的
require'sinatra'
的顶部,现在它工作了!非常感谢。这让我发疯了。
ENV['RACK_ENV'] = 'test'