rails minitest 存根断言替代方法
rails minitest stubbing to assert alternate method
一种方法依赖两个不同的地理定位 API,第二个用作备份:
def admin_create
@user_object = User.create!(user_params)
set_area(@user_object)
end
def set_area(resource)
do_geocode_lookup(resource)
if !resource.lon
do_alternate_geocode_lookup(resource)
end
end
找到一个 returns 一个空的 lon/lat 集的数据集具有挑战性(正统派人先写测试),
所以..有没有办法对测试进行存根以便
do_geocode_lookup
returns 空经纬度值
do_alternate_geocode_lookup(resource)
方法被调用?并因此进行测试?
sign_in operator_user
post admin_create_users_url, params: {user: { [...] } }
assert[...]
使用 Mocha 你可以存根一个方法,这样一个对象的任何实例 return 都是一个指定的值。
例如....
Account.any_instance.stubs(:reviews_enabled).returns(:true)
它还允许您测试调用了一个方法...
Account.any_instance.expects(:review_started)
事实上你正在改变传入的资源而不是 return 使事情变得有点棘手,但我很想 do_geocode_lookup
return true 如果它找到一些东西,否则为 false,以使事情更容易测试。
def set_area(resource)
found = do_geocode_lookup(resource)
unless found
found = do_alternate_geocode_lookup(resource)
end
found
end
然后你可以在你的测试中做这样的事情...
Geocoder.any_instance.stubs(:do_geocode_lookup).returns(:false)
Geocoder.any_instance.expects(:do_alternate_geocode_lookup)
result = sut.set_area(user)
如果未调用预期的方法,您会收到“未调用预期的方法”错误。您可以使用存根和期望变得更加复杂,但在这种情况下您不必这样做。
一种方法依赖两个不同的地理定位 API,第二个用作备份:
def admin_create
@user_object = User.create!(user_params)
set_area(@user_object)
end
def set_area(resource)
do_geocode_lookup(resource)
if !resource.lon
do_alternate_geocode_lookup(resource)
end
end
找到一个 returns 一个空的 lon/lat 集的数据集具有挑战性(正统派人先写测试), 所以..有没有办法对测试进行存根以便
do_geocode_lookup
returns 空经纬度值do_alternate_geocode_lookup(resource)
方法被调用?并因此进行测试?
sign_in operator_user
post admin_create_users_url, params: {user: { [...] } }
assert[...]
使用 Mocha 你可以存根一个方法,这样一个对象的任何实例 return 都是一个指定的值。
例如....
Account.any_instance.stubs(:reviews_enabled).returns(:true)
它还允许您测试调用了一个方法...
Account.any_instance.expects(:review_started)
事实上你正在改变传入的资源而不是 return 使事情变得有点棘手,但我很想 do_geocode_lookup
return true 如果它找到一些东西,否则为 false,以使事情更容易测试。
def set_area(resource)
found = do_geocode_lookup(resource)
unless found
found = do_alternate_geocode_lookup(resource)
end
found
end
然后你可以在你的测试中做这样的事情...
Geocoder.any_instance.stubs(:do_geocode_lookup).returns(:false)
Geocoder.any_instance.expects(:do_alternate_geocode_lookup)
result = sut.set_area(user)
如果未调用预期的方法,您会收到“未调用预期的方法”错误。您可以使用存根和期望变得更加复杂,但在这种情况下您不必这样做。