Add some variable to the test case: bool finished;
Set the variable in the callback: finished = true;
Add something like
assertWithTimeout({return finished;});
at the end of the test case, following ev.run;
Does it help?
On Wednesday, 29 August 2012 at 19:20:25 UTC, Shripad K wrote:
How do I test callbacks/delegates which are not triggered
immediately? Especially when I need to do unit tests with an
event loop?
A simple example from my codebase (SaaSy here is a custom HTTP
client to an API endpoint):
class TestSaaSy {
mixin TestMixin;
// this works
void test_encoded_auth() {
auto ev = new EventLoop;
auto saasy = new SaaSy(ev, "test", "test");
assert(saasy.encoded_auth == "dGVzdDp0ZXN0dGVzdA==",
"encoding issue");
ev.close;
ev.run;
}
// won't work. test gets finished even before the callback
is fired!
void test_get_subscription() {
auto ev = new EventLoop;
auto saasy = new SaaSy(ev, "test", "test");
saasy.getSubscription("ref363466", (bool err, string
response) {
assert(err == true);
ev.close;
});
ev.run;
}
}