Promise mocking library to make Promises resolve synchronously
- Tests are faster
- Don't need
done()
function - Stack traces are preserved / Easier debugging
- Can be easier to write tests (depends)
Nope
npm install promise-mock
Get the result of a Promise PromiseMock.getResult
import PromiseMock from 'promise-mock';
describe('testing', function() {
beforeEach(function() {
PromiseMock.install()
});
afterEach(function() {
PromiseMock.uninstall();
});
it('Sync Promise test', function() {
var result = PromiseMock.getResult(Promise.resolve('hello')));
expect(result).toBe('hello');
});
});
Handle errors synchronously
import PromiseMock from 'promise-mock';
describe('testing', function() {
beforeEach(function() {
PromiseMock.install()
});
afterEach(function() {
PromiseMock.uninstall();
});
it('Sync Promise test', function() {
expect(function() {
PromiseMock.getResult(Promise.reject(new Error('An error')));
}).toThrow(new Error('An Error'));
});
});
Execute a single async callback
import PromiseMock from 'promise-mock';
describe('testing', function() {
beforeEach(function() {
PromiseMock.install()
});
afterEach(function() {
PromiseMock.uninstall();
});
it('Sync Promise test', function() {
var result;
Promise.resolve('hello').then(function(data) {
result = data;
});
Promise.run();
expect(result).toBe('hello');
});
});
Resolve all pending Promises
import PromiseMock from 'promise-mock';
describe('testing', function() {
beforeEach(function() {
PromiseMock.install()
});
afterEach(function() {
PromiseMock.uninstall();
});
it('Sync Promise test', function() {
var result1, result2, result3;
Promise.resolve('hello1').then(function(data) {
result1 = data;
return 'hello2';
}).then(function(data) {
result2 = data;
return 'hello3';
}).then(function(data) {
result3 = data;
});;
Promise.runAll();
expect(result1).toBe('hello1');
expect(result2).toBe('hello2');
expect(result3).toBe('hello3');
});
});
By default Promise.runAll()
will throw an Error if there are no pending Promises. If you don't want an error, you can use Promise.runAll(false)
Since the move to ES6 modules. You need to add .default
const PromiseMock = require('promise-mock').default;
npm install
npm test
MIT