我们有几个React应用程序嵌入在我们平台的控制器中,从S3 AWS域提供服务。默认情况下,rspec似乎不允许在测试的代码中使用<script src="https://some-external-dns.com/scripts.js"></script>
,而是要求您"存根"。您的脚本请求和响应使用如下内容:
stub_request(:get, "https://foo-box.s3.amazonaws.com/assets/login-hero-manifest.json").with(
headers: {
'Accept' => '*/*',
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
'Host' => 'foo-box.s3.amazonaws.com',
'User-Agent' => 'Ruby'
}
).to_return(
status: 200,
body: {
environment: "prod",
name: "feature-administration",
url: "https://foo-box.s3.amazonaws.com/assets/login-hero.js"
}.to_json
)
理论上我明白这一点,但如果我们知道这是一个受信任的域,我更希望我们只是解析响应,这样我们就可以针对它进行测试(同时,在数百个测试中找出数百个请求/响应感觉完全不直观和不可持续。
我不是非常精通Ruby/rspec,但我希望有一些方法可以允许列表代码从foo-box.s3.amazonaws.com
返回。
stub_request
实际上是WebMock工具的一个特性,而不是RSpec。
因此,您的问题中的代码实际上阻止您对foo-box.s3.amazonaws.com
进行HTTPS调用,而是使用您指定的状态码和主体进行响应。这是一件好事。它将使您的测试更可靠和性能。
至于这是否可持续,这取决于您正在测试的内容。在上面的示例中,测试似乎是在验证S3上的JSON文件的内容。测试的哪一部分对你来说是重要的?确保文件中的JSON是正确的?或者,确保S3在请求时返回您期望的文件。
因为在您请求S3时测试S3是否返回正确的文件是没有意义的——Amazon的工程师可能已经为您完成了这项工作——您可以在这里安全地忽略S3并专注于文件的内容。这意味着您可以从测试中删除WebMock,并坚持使用普通的旧RSpec。
假设文件是由您的代码(或者可能是您的构建/部署过程)动态生成并放置在S3上的,您应该能够测试生成内容的代码部分,而无需测试将其上传到/从S3下载的代码部分。