javascript - Mocha - Testing Promise, `done` never gets called in Promise -


i'm trying test spy called in .then block of promise, done in then block doesn't seem executed @ all.

i'm getting timeout of 2000ms exceeded.

here's i'm testing (async):

/**  * passed down loginform component  * handle form submission.  */ _submithandler(data) {   return function(evt) {     evt.preventdefault && evt.preventdefault();     evt.stoppropagation && evt.stoppropagation();      return request('post', 'auth', data)       .then((res) => {         authactions.login();         return res;       })   } } 

here's test:

describe('when succeeds', () => {   it('should login', (done) => {     sinon.spy(authactions, 'login');      instance._submithandler({})({})       .then((res) => {         console.log('called!!!');         expect(authactions.login.called).to.equal(true);         authactions.login.restore();         done();       }, done);   }); }); 

i'm using karma run tests; chai , sinon.

i had issue, cause trying respond xhr before connection opened, e.g.

this code throw invalid_state_err - 0 fakexmlhttprequest.setresponseheaders:

describe("get", function () {    beforeeach(function () {     this.xhr = sinon.usefakexmlhttprequest();     this.xhr.oncreate = function (request) {       request.respond(200, null, "");     };   });    aftereach(function () {     this.xhr.restore();   });    it("should make request", function () {     myobject.get("testurl");   });  }); 

this code works:

describe("get", function () {    beforeeach(function () {     this.xhr = sinon.usefakexmlhttprequest();     this.requests = [];     this.xhr.oncreate = function (request) {       this.requests.push(request);     };   });    aftereach(function () {     this.xhr.restore();   });    it("should make request", function () {     myobject.get("testurl");     this.requests[0].respond(200, null, "");   });  }); 

reading documentation, show same technique of pushing requests array, had subconsciously , inaccurately came away impression oncreate, despite name, more "on request".

myobject.get = function (url) {   var http = new xmlhttprequest();    // xhr instance exists   // readystate 0   // oncreate runs   http.open("get", url);    http.send();    // readystate 1   // can call setresponseheaders , respond  } 

the result have put respond code after call method runs xmlhttprequest's send, as:

myobject.get("testurl"); this.requests[0].respond(200, null, ""); 

i using respond method, same true setresponseheaders(respond calls setresponseheaders)--in test called early.


Popular posts from this blog

c# - ODP.NET Oracle.ManagedDataAccess causes ORA-12537 network session end of file -

matlab - Compression and Decompression of ECG Signal using HUFFMAN ALGORITHM -

utf 8 - split utf-8 string into bytes in python -