在为 Rack 应用程序编写集成测试时,我想使用经典的 config.ru
文件在运行时环境中启用的所有中间件来测试该应用程序。
使用 rack-app ,我可以用以下方法实例化 Rack 应用程序:
describe App do
include Rack::App::Test
rack_app described_class
describe '/hello' do
get '/example/endpoint/'
# ...
end
end
使用裸rack
,它看起来是一样的:
include Rack::Test::Methods
let(:app) { Application }
但是没有启用的中间件,因为应用程序不是通过 config.ru
实例化的,其中 use
命令启用它们。
如何在测试中启用中间件,以便在示例中请求通过它们运行?
最佳答案
中间件中的逻辑是 rack-app 类的必备要求吗?
如果是,那么它应该直接在 rack-app 类中使用,并且它应该像您通常所做的那样是一个简单的规范。您使用 rack_app ClassNameHere 定义 rack-app 主题并进行测试。这种方法的优点是您不必从规范的角度知道一些逻辑在中间件中,一些位于 Controller 部分,因为它们是实现细节。只要在规范测试用例中实现了预期的行为,就应该是好的。
但如果答案是否定的,那么它应该独立测试,并且通常应该有一个地方完成所有的集成。我通常在顶级 Rack 应用程序中组合子 Rack 应用程序和中间件,我只使用 use 和 mount 关键字并创建集成测试以确保路由并确认中间件的预期行为。
中间件中的逻辑是否是应用程序的一种契约形式,例如中间件确保 Rack 调用环境中的值,但该值未与中间件耦合,那么我将自行测试中间件。在 rack-app 类规范中,我会保证 rack 调用环境中的实体。这将支持项目的长期维护方面,并使 rack-app 类易于重用。
另一方面,如果你真的需要一起测试而不是直接使用类中的中间件,那么你可以在规范中使用以下习惯用法:
rack_app do
use MiddlewareNameHere, params
mount AppToTestWithTheMiddleware
end
干杯, 亚当
关于ruby - 如何在 Rack 应用程序的集成测试中启用中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60976324/