Last active
August 29, 2015 14:06
-
-
Save lucassus/b1010b563395b6efa120 to your computer and use it in GitHub Desktop.
Q, mocha, chai, sinon cheatsheet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var chai = require('chai'); | |
var chaiAsPromised = require('chai-as-promised'); | |
chai.use(chaiAsPromised); | |
var sinonChai = require('sinon-chai'); | |
chai.use(sinonChai); | |
var expect = require('chai').expect; | |
var sinon = require('sinon'); | |
var Q = require('q'); | |
describe('promise', function() { | |
describe('on success', function() { | |
var promise; | |
beforeEach(function() { | |
promise = Q.promise(function(resolve) { | |
setTimeout(function() { resolve('test data'); }); | |
}); | |
}); | |
it('is fullfilled', function() { | |
return expect(promise).to.be.fullfilled; | |
}); | |
it('is not rejected', function() { | |
return expect(promise).to.not.be.rejected; | |
}); | |
it('resolves valid data', function() { | |
return promise.then(function(data) { | |
expect(data).to.eq('test data'); | |
}); | |
}); | |
it('resolves valid data', function() { | |
return expect(promise).to.eventually.eq('test data'); | |
}); | |
it('resolves valid data', function() { | |
return expect(promise).to.become('test data'); | |
}); | |
it('all happy', function() { | |
return Q.all([ | |
expect(promise).to.become('test data'), | |
expect(promise).to.not.become('invalid data'), | |
expect(promise).to.not.be.rejected, | |
expect(promise).to.be.fullfilled | |
]); | |
}); | |
}); | |
describe('on error', function() { | |
var promise; | |
beforeEach(function() { | |
promise = Q.promise(function(resolve, reject) { | |
setTimeout(function() { reject('error!') }); | |
}); | |
}); | |
it('is rejected', function() { | |
return expect(promise).to.be.rejected; | |
}); | |
it('is not be fullfilled', function() { | |
return expect(promise).to.not.be.fullfilled; | |
}); | |
it('raises an error', function() { | |
return promise.catch(function(error) { | |
expect(error).to.eq('error!'); | |
}); | |
}); | |
it('raises an error', function() { | |
return expect(promise).to.be.rejectedWith('error!'); | |
}); | |
}); | |
describe('progress callback', function() { | |
var promise; | |
beforeEach(function() { | |
var events = require('events'); | |
var longRunningTask = function(callback) { | |
var emitter = new events.EventEmitter(); | |
var n = 4; | |
setTimeout(function() { | |
var data = []; | |
for (var i = 0; i < n; i++) { | |
emitter.emit('progress', { step: i + 1, total: n }); | |
data.push(i); | |
} | |
callback(data); | |
}); | |
return emitter; | |
}; | |
promise = Q.promise(function(resolve, reject, notify) { | |
longRunningTask(resolve).on('progress', function(info) { | |
notify('Done ' + (info.step / info.total) * 100 + '%') | |
}); | |
}); | |
}); | |
it('is not fullfilled', function() { | |
return expect(promise).to.not.be.fullfilled; | |
}); | |
it('resolves valid data', function() { | |
return expect(promise).to.eventually.deep.eq([0, 1, 2, 3]); | |
}); | |
it('reports a progress', function() { | |
var bar = sinon.spy(); | |
return promise.progress(bar).then(function() { | |
expect(bar).to.have.been.called; | |
expect(bar.callCount).to.eq(4); | |
expect(bar).to.have.been.calledWith('Done 25%'); | |
expect(bar).to.have.been.calledWith('Done 50%'); | |
expect(bar).to.have.been.calledWith('Done 75%'); | |
expect(bar).to.have.been.calledWith('Done 100%'); | |
expect(bar.firstCall).to.have.been.calledWith('Done 25%'); | |
expect(bar.withArgs('Done 50%')).to.have.been.calledAfter(bar.withArgs('Done 25%')); | |
expect(bar.withArgs('Done 75%')).to.have.been.calledAfter(bar.withArgs('Done 50%')); | |
expect(bar.withArgs('Done 100%')).to.have.been.calledAfter(bar.withArgs('Done 75%')); | |
}); | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment