gpt4 book ai didi

rspec - 将 Sinatra 应用程序的测试数据库与开发数据库分开?

转载 作者:行者123 更新时间:2023-12-04 16:35:41 24 4
gpt4 key购买 nike

作为学习练习,我正在使用 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 .

最佳答案

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

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

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

ENV['RACK_ENV'] = 'test'

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

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

关于rspec - 将 Sinatra 应用程序的测试数据库与开发数据库分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com