Я провожу тест, в котором у меня есть следующие звонки ..
class Device < ActiveRecord::Base
before_save :notify_provision_server
def notify_provision_server
if provisioned?
return make_api_call(:is_provision,:post, '/api/v1/ivydevice', {
fqdn: site.dns_name ,
customer_id: site.customer_id.to_s,
mac: mac_address,
user_id: login,
password: password,
name: name,
system: SYSTEM_NAME,
timezone: utc_offset_sec.to_s
}.to_json)
else
return make_api_call(:is_provision, :delete, "/api/v1/ivydevices/#{mac_address_was}")
end
end
end
Я собираюсь заглушить метод make_api_call, используя заглушки мокко. Поскольку у меня нет экземпляров ..
Device.any_instance.stubs(:make_api_call).with do |*args|
args[0] == :is_provision
args[1] == :post
## Intentionally do not match the argument.
args[2] == '/api/v1/ivydeviceaaaaaa'
args[3].class == String
end.returns(true).times(1)
По-видимому, проверка аргументов кажется неудачной, и утверждение приводит к успеху
Вот как выглядит тест
_device = create_device(@site, 'test', name: 'Stuff')
Device.any_instance.stubs(:make_api_call).with do |*args|
args[0] == :is_provision
args[1] == :post
args[2] == '/api/v1/ivydeviceaaaaaa'
args[3].class == String
end.returns(true).times(1)
Device.any_instance.stubs(:make_api_call).with do |*args|
args[0] == :is_provision
args[1] == :delete
args[2].class == String
args[3].class == String
end.returns(true).times(0)
## Make the update request
put(
customer_device_url(_device.id),
headers: request_headers,
params: {
data: {
attributes: {
is_provision: true,
mac_address: 'abc:def',
timezone: 'Asia/Kolkata'
}
}
}
)
assert_successful_response
Чего мне здесь не хватает, так как большинство ссылок здесь и здесь упоминают объявление с блоком точно так же, как у меня.