调用特定服务时如何在 ruby Geocoder 中存根调用
How to stub call in ruby Geocoder when calling specific service
地理编码器 gem 允许在测试时存根:https://github.com/alexreisner/geocoder#testing
Testing
When writing tests for an app that uses Geocoder it may be useful to avoid network calls and have Geocoder return consistent, configurable results. To do this, configure the :test lookup and/or :ip_lookup
Geocoder.configure(lookup: :test, ip_lookup: :test)
Add stubs to define the results that will be returned:
Geocoder::Lookup::Test.add_stub(
"New York, NY", [
{
'coordinates' => [40.7143528, -74.0059731],
'address' => 'New York, NY, USA',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
}
]
)
这在调用服务而不指定服务时有效:
results = Geocoder.search(self.address)
但是当我直接在调用中指定服务时,存根不会发生。有没有办法对这种类型的调用进行存根?
results = Geocoder.search(self.address, lookup: :google)
我是 ruby 和 rails 的新手,非常感谢任何帮助。
示例代码中有一个小错误。应该是Geocoder.search(self.address, lookup: :google)
。只是提到它,因为它最初让我失望。
通读源代码后很明显存根和指定服务不能一起工作。
name = options[:lookup] || Configuration.lookup || Geocoder::Lookup.street_services.first
这是确定要使用的服务时查询 class 的代码。您可以看到它首先检查传递的查找服务选项,然后检查配置(已设置为测试),然后它使用列表中的第一个默认服务。
最简单的解决方案是使用 VCR(和 Webmock)gem。它将实时网络请求的结果记录到一个文件中,并用文件内容响应测试的所有未来请求。停止实时网络请求,让您不必创建模拟数据。
地理编码器 gem 允许在测试时存根:https://github.com/alexreisner/geocoder#testing
Testing
When writing tests for an app that uses Geocoder it may be useful to avoid network calls and have Geocoder return consistent, configurable results. To do this, configure the :test lookup and/or :ip_lookup
Geocoder.configure(lookup: :test, ip_lookup: :test)
Add stubs to define the results that will be returned:
Geocoder::Lookup::Test.add_stub(
"New York, NY", [
{
'coordinates' => [40.7143528, -74.0059731],
'address' => 'New York, NY, USA',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
}
]
)
这在调用服务而不指定服务时有效:
results = Geocoder.search(self.address)
但是当我直接在调用中指定服务时,存根不会发生。有没有办法对这种类型的调用进行存根?
results = Geocoder.search(self.address, lookup: :google)
我是 ruby 和 rails 的新手,非常感谢任何帮助。
示例代码中有一个小错误。应该是Geocoder.search(self.address, lookup: :google)
。只是提到它,因为它最初让我失望。
通读源代码后很明显存根和指定服务不能一起工作。
name = options[:lookup] || Configuration.lookup || Geocoder::Lookup.street_services.first
这是确定要使用的服务时查询 class 的代码。您可以看到它首先检查传递的查找服务选项,然后检查配置(已设置为测试),然后它使用列表中的第一个默认服务。
最简单的解决方案是使用 VCR(和 Webmock)gem。它将实时网络请求的结果记录到一个文件中,并用文件内容响应测试的所有未来请求。停止实时网络请求,让您不必创建模拟数据。