gpt4 book ai didi

ruby - 如何使用 Sinatra 配置 RSpec 以在我的测试套件运行之前动态确定哪个 Sinatra 应用程序正在运行?

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:33 24 4
gpt4 key购买 nike

好的。我想为我的 Sinatra 应用程序使用 RSpec 请求规范。

我有一个 config.ru

# config.ru
require File.dirname(__FILE__) + '/config/boot.rb'

map 'this_route' do
run ThisApp
end

map 'that_route' do
run ThatApp
end

boot.rb 仅使用 Bundler 并对应用程序的其余部分执行额外的要求:

这个应用看起来像:

# lib/this_app.rb

class ThisApp < Sinatra::Base
get '/hello' do
'hello'
end
end

所以我正在使用 RSpec,我想编写如下请求规范:

# spec/requests/this_spec.rb
require_relative '../spec_helper'

describe "This" do
describe "GET /this_route/hello" do
it "should reach a page" do
get "/hello"
last_response.status.should be(200)
end
end

it "should reach a page that says hello" do
get "/hello"
last_response.body.should have_content('hello')
end
end
end
end

这很好用,因为我的 spec_helper.rb 设置如下:

# spec/spec_helper.rb
ENV['RACK_ENV'] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/boot")
require 'capybara/rspec'

RSpec.configure do |config|
config.include Rack::Test::Methods
end

def app
ThisApp
end

但我的问题是我想从我的 rackup 文件中测试“ThatApp”以及以后可能添加的任何数量的应用程序以及“ThisApp”。例如,如果我有第二个请求规范文件:

# spec/requests/that_spec.rb
require_relative '../spec_helper'

describe "That" do
describe "GET /that_route/hello" do
it "should reach a page" do
get "/hello"
last_response.status.should be(200)
end
end

it "should reach a page that says hello" do
get "/hello"
last_response.body.should have_content('hello')
end
end
end
end

RackTest 要求我正在测试的 rack 应用程序在 spec_helper 文件中用那个“app”方法定义,我认为最终我将不得不在做进一步的请求规范时也必须向 Capybara.app 提供同样的东西用它。

我觉得我遗漏了一些东西,也许有一种简单的方法可以在运行时为 RackTest 和 Capybara 设置“应用程序”,具体取决于我在请求规范中测试的路由和后续 Rack 应用程序。就像 RSpec.configure 中的前过滤器一样,但我想不出或找不到我如何访问当前加载的 Rack 应用程序并尝试在测试套件运行之前将其设置在那里。

有人明白我想做的事并且能想到点什么吗?感谢您的帮助。

最佳答案

为您要测试的每个 sinatra 应用程序定义一个不同的帮助程序模块,每个应用程序都应该定义自己的 app 方法来返回相应的应用程序。然后,您可以简单地在要测试给定应用程序的适当示例组中包含 MySinatraAppHelper

您还可以使用 rspec metadata将模块自动包含在示例组中。

关于ruby - 如何使用 Sinatra 配置 RSpec 以在我的测试套件运行之前动态确定哪个 Sinatra 应用程序正在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902368/

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