Я хочу проверить функцию, которая использует Task.async
Чтобы пройти мой тест, мне нужно заставить его спать на 100 мс перед утверждениями, иначе тестовый процесс будет убит до того, как будет выполнена асинхронная задача.
Есть ли лучший способ?
EDITED, добавив образцы кода:
Код, который я хотел бы проверить (примерно):
def search(params) do
RateLimiter.rate_limit(fn ->
parsed_params = ExTwitter.Parser.parse_request_params(params)
json = ExTwitter.API.Base.request(:get, "1.1/search/tweets.json", parsed_params)
Task.async(fn -> process_search_output(json) end)
new_max_id(json)
end)
end
И тест, который я уже написал (работает только с вызовом спать)
test "processes and store tweets" do
with_mock ExTwitter.API.Base, [request: fn(_,_,_) -> json_fixture end] do
with_mock TwitterRateLimiter, [rate_limit: fn(fun) -> fun.() end] do
TSearch.search([q: "my query"])
:timer.sleep(100)
# assertions
assert called TStore.store("some tweet from my fixtures")
assert called TStore.store("another one")
end
end
end