【问题标题】:Separate Sinatra app's test database from development database?将 Sinatra 应用程序的测试数据库与开发数据库分开?
【发布时间】:2012-03-11 16:36:58
【问题描述】:

作为学习练习,我正在使用 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 时,上述元素都会添加到我的开发数据库中。

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

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

如果有什么帮助,可以看到我的代码here

【问题讨论】:

    标签: rspec sinatra datamapper


    【解决方案1】:

    spec_helper.rb 文件中,您需要my_app.rb 文件,而该文件又需要db.rb 来设置您的数据库,但这发生在您调用set :environment, :test 之前,所以configure :test块没有被运行(环境是该阶段的默认开发)。

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

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

    ENV['RACK_ENV'] = 'test'
    

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

    这与您引用的其他问题类似,但机架应用程序使用 RACK_ENV 而不是 RAILS_ENV

    【讨论】:

    • 谢谢,我将ENV['RACK_ENV'] = 'test' 放在各个地方,并且对为什么没有收到它感到沮丧-阅读您的答案后,我将其放在spec_helper.rb 的顶部之前 require 'sinatra' 现在可以了!
    • 非常感谢。这让我发疯了。
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 2012-07-11
    • 2014-06-11
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    相关资源
    最近更新 更多