Closed
Bug 998257
Opened 11 years ago
Closed 10 years ago
[Messages][Refactoring] Investigate possible ways of making unit tests for promise-based code more simple and useful
Categories
(Firefox OS Graveyard :: Gaia::SMS, defect)
Tracking
(Not tracked)
RESOLVED
WORKSFORME
People
(Reporter: azasypkin, Unassigned)
References
Details
Attachments
(1 file)
62 bytes,
text/plain
|
Details |
We have several potential problems with unit tests for promise-based code that can lead to increase in time spent on writing of unit tests and\or making a bunch of code just for the sake of simple unit tests:
Problem #1: Currently we can unit-test only API that exposes promise publicly, so that we can use 'then\catch' methods to catch the moment when promise is actually resolved. That won't always be true when we use promises more intensively.
Example (call1 and call2 can be private\non-spyable):
var publicFuncThatNeedToBeTested = function() {
// make first async call that returns promise
call1().then(function() {
// change app state that should be verified by test
});
// second async call that doesn't depend on call1 and can be issued in parallel
return call2().then(function() {
// change app state that also should be verified by test
});
};
Solution idea: use 'Promise.flush.then(make_assertions) to resolve\reject all pending promises before making assertions.
Problem #2: We'll probably want to use promises for test purposes, that may be dependent on each other. With just using 'then\catch' we may end up with too nested and unmaintainable unit tests:
test(...., function(done) {
click1();
waitForClick1ResultToAppear().then(function() {
click2();
return waitForClick2ResultToAppear();
}).then(function() {
click3();
......
}).then(done, done)
});
Solution idea: use 'yield' and later 'await' to make tests flatter:
test(...., function() {
click1();
yield waitForClick1ResultToAppear();
click2();
yield waitForClick2ResultToAppear();
click3();
});
Also we need to update Chai and Mocha libs to make it more Promise friendly (that is supposed to be done in the bug 991663)
Reporter | ||
Comment 1•10 years ago
|
||
Using MockPromise and Generators to flatten asynchronous unit tests.
Comment 2•10 years ago
|
||
Oleg, do you think bug 1094850 introducing chai as promised is good enough for you? See https://github.com/domenic/chai-as-promised/ for more information.
Flags: needinfo?(azasypkin)
Reporter | ||
Comment 3•10 years ago
|
||
(In reply to Julien Wajsberg [:julienw] from comment #2)
> Oleg, do you think bug 1094850 introducing chai as promised is good enough
> for you? See https://github.com/domenic/chai-as-promised/ for more
> information.
Yeah, I think it improves current situation a lot, so that there is no critical need in more custom code :)
Thanks for working on this!
Status: NEW → RESOLVED
Closed: 10 years ago
Flags: needinfo?(azasypkin)
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•