Я работаю над тестовым примером, в котором я хочу проверить целостность аргумента, передаваемого методу.
Вот как выглядит код моего контроллера.
def show
response = begin
site = Site.find_by(id: params[:id])
site.bonsai_site_configuration
rescue StandardError => exception
ExceptionNotifier.notify_exception(exception)
{}
end
render json: response, status: 200
end
Теперьвсе, что я хочу, чтобы убедиться, что когда я высмеиваю find_by
и возвращаю site
объект, мне нужен аргумент, чтобы точно соответствовать тому, что я намеревался.здесь {id: site.id}
Так выглядит мой тест.Я не очень хорошо знаком с Минитестом, поэтому прошу вас, пожалуйста, наберитесь терпения.Поскольку я не совсем уверен, является ли приведенный ниже код (тест) правильным способом написания теста минимального теста.
test 'Services::SiteController: Show: Return `{}` as Site configuration on error' do
mock = MiniTest::Mock.new
mock.expect :call, true, [RuntimeError]
site = Site.first
site_mock = MiniTest::Mock.new
site_mock.expect :call, site, [{id: site.id}]
raises_exception = Proc.new { raise 'boom' }
Site.stub(:find_by, site_mock) do
site.stub(:bonsai_site_configuration, raises_exception) do
ExceptionNotifier.stub(:notify_exception, mock) do
get "/switch/sites/#{site.id}",
headers: { Authorization: "Basic b2576d705c208c19fd1601ef58aa0506bd4e2e93c51c19df856483cbbfc7cb67" }
response = JSON.parse(@response.body)
assert_successful_response
assert_empty(response)
end
end
end
assert_mock site_mock
assert_mock mock
end