1

使用 WebMock 存根 Oauth 2 提供程序。问题是我想使用机架测试。

机架测试仅针对应用程序的一个实例运行,并且不了解 Oauth 2 提供程序等外部 HTTP 主机。

WebMock.stub_request(:get, "https://test.oauth-provider.com/oauth/authorize")将不起作用,因为请求以/oauth/authorize.

WebMock 有没有办法响应本地请求?例如:

WebMock.stub_request(:get, "/oauth/authorize")
4

1 回答 1

1

在我看来,您对您正在测试的内容有点困惑,并且必须划清界限,您的系统在哪里(所谓的 SuT,被测系统)以及外部各方在哪里。

这非常重要,因为:

  • SuT 是您在测试期间将与之交互的内容(即您的 Rack 应用程序);
  • 外部方将被模拟(即外部 Web 服务,以及......这可能令人惊讶,其他库,如 OAuth、SQL 驱动程序等)

这意味着,如果您尝试将 WebMock 用于应用程序的任何部分由于模拟相对 URL 的问题,这看起来像是您正在做的事情),那么您显然做错了什么。

更接近你的任务,如果我是你,我会:

  1. 选择一个好的、经过良好测试的 OAuth 库并将其放入应用程序中。
  2. 在测试方面,只需使用我自己的简单存根对象,而不是真正的 OAuth 实现类。这将把重点转移到测试我的服务实现的行为上。验证 OAuth 库实际上是一项双重工作,因为它的作者已经涵盖了它。

希望这可以帮助!

于 2015-08-21T05:15:06.817 回答