Chcę przetestować funkcję, która korzysta Task.async
Testowanie kodu asynchronicznego w Elixir
Aby uczynić mój test zdać, muszę zrobić to spać przez 100ms przed twierdzeniami, w przeciwnym razie proces testowy zostanie zabity przed async zadanie jest wykonywane.
Czy istnieje lepszy sposób?
edytować, dodając próbki kodu:
Kod Chciałbym przetestować (w przybliżeniu):
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
a test już pisałem (działa tylko z wezwaniem do spania)
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
Może pokażesz nam minimalną uszkodzoną przykład, który ilustruje szczególnego rodzaju twierdzenia, które chcesz robić? –
Przykładowy kod bardzo pomógłby w uzyskaniu dobrej odpowiedzi. –
OK właśnie dodane próbki kodu – Chris