diff options
author | winh <winnie@gitlab.com> | 2017-05-11 10:19:20 +0200 |
---|---|---|
committer | winh <winnie@gitlab.com> | 2017-05-17 23:14:18 +0200 |
commit | 4950dd9792c5d1da401a846ba408bf275f58e332 (patch) | |
tree | 6f5cd0c2611482a2a3ed82e2e5a51fd99a3d40e4 | |
parent | fb31c6cedf532e9594ff3d42050f01be0cfc8d57 (diff) | |
download | gitlab-ce-4950dd9792c5d1da401a846ba408bf275f58e332.tar.gz |
Document Promise testing best practice (!11284)winh-testing-promises
-rw-r--r-- | doc/development/fe_guide/testing.md | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/doc/development/fe_guide/testing.md b/doc/development/fe_guide/testing.md index 5852cac2aa5..5c6bdc97ef6 100644 --- a/doc/development/fe_guide/testing.md +++ b/doc/development/fe_guide/testing.md @@ -68,6 +68,68 @@ describe('.methodName', () => { }); }); ``` +#### Testing Promises + +When testing Promises you should always make sure that the test is asynchronous and rejections are handled. +Your Promise chain should therefore end with a call of the `done` callback and `done.fail` in case an error occurred. + +```javascript +/// Good +it('tests a promise', (done) => { + promise + .then((data) => { + expect(data).toBe(asExpected); + }) + .then(done) + .catch(done.fail); +}); + +/// Good +it('tests a promise rejection', (done) => { + promise + .catch((error) => { + expect(error).toBe(expectedError); + }) + .then(done) + .catch(done.fail); +}); + +/// Bad (missing done callback) +it('tests a promise', () => { + promise + .then((data) => { + expect(data).toBe(asExpected); + }) +}); + +/// Bad (missing catch) +it('tests a promise', (done) => { + promise + .then((data) => { + expect(data).toBe(asExpected); + }) + .then(done) +}); + +/// Bad (use done.fail in asynchronous tests) +it('tests a promise', (done) => { + promise + .then((data) => { + expect(data).toBe(asExpected); + }) + .then(done) + .catch(fail) +}); + +/// Bad (missing catch) +it('tests a promise rejection', (done) => { + promise + .catch((error) => { + expect(error).toBe(expectedError); + }) + .then(done) +}); +``` #### Stubbing |