242 lines
7.3 KiB
JavaScript
242 lines
7.3 KiB
JavaScript
describe('AsyncExpectation', function() {
|
|
beforeEach(function() {
|
|
jasmineUnderTest.Expectation.addAsyncCoreMatchers(
|
|
jasmineUnderTest.asyncMatchers
|
|
);
|
|
});
|
|
|
|
describe('Factory', function() {
|
|
it('throws an Error if promises are not available', function() {
|
|
var thenable = { then: function() {} },
|
|
options = { global: {}, actual: thenable };
|
|
function f() {
|
|
jasmineUnderTest.Expectation.asyncFactory(options);
|
|
}
|
|
expect(f).toThrowError(
|
|
'expectAsync is unavailable because the environment does not support promises.'
|
|
);
|
|
});
|
|
|
|
it('throws an Error if the argument is not a promise', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
function f() {
|
|
jasmineUnderTest.Expectation.asyncFactory({ actual: 'not a promise' });
|
|
}
|
|
expect(f).toThrowError(
|
|
'Expected expectAsync to be called with a promise.'
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('#not', function() {
|
|
it('converts a pass to a fail', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
actual = Promise.resolve(),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
util: jasmineUnderTest.matchersUtil,
|
|
actual: actual,
|
|
addExpectationResult: addExpectationResult
|
|
});
|
|
|
|
return expectation.not.toBeResolved().then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
false,
|
|
jasmine.objectContaining({
|
|
passed: false,
|
|
message: 'Expected a promise not to be resolved.'
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
it('converts a fail to a pass', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
actual = Promise.reject(),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
util: jasmineUnderTest.matchersUtil,
|
|
actual: actual,
|
|
addExpectationResult: addExpectationResult
|
|
});
|
|
|
|
return expectation.not.toBeResolved().then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
true,
|
|
jasmine.objectContaining({
|
|
passed: true,
|
|
message: ''
|
|
})
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('propagates rejections from the comparison function', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
var error = new Error('ExpectationSpec failure');
|
|
|
|
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
actual = dummyPromise(),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
actual: actual,
|
|
addExpectationResult: addExpectationResult
|
|
});
|
|
|
|
spyOn(expectation, 'toBeResolved').and.returnValue(Promise.reject(error));
|
|
|
|
return expectation.toBeResolved().then(
|
|
function() {
|
|
fail('Expected a rejection');
|
|
},
|
|
function(e) {
|
|
expect(e).toBe(error);
|
|
}
|
|
);
|
|
});
|
|
|
|
describe('#withContext', function() {
|
|
it('prepends the context to the generated failure message', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var util = {
|
|
buildFailureMessage: function() {
|
|
return 'failure message';
|
|
}
|
|
},
|
|
addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
actual: Promise.reject('rejected'),
|
|
addExpectationResult: addExpectationResult,
|
|
util: util
|
|
});
|
|
|
|
return expectation
|
|
.withContext('Some context')
|
|
.toBeResolved()
|
|
.then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
false,
|
|
jasmine.objectContaining({
|
|
message: 'Some context: failure message'
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
it('prepends the context to a custom failure message', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var util = {
|
|
buildFailureMessage: function() {
|
|
return 'failure message';
|
|
}
|
|
},
|
|
addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
actual: Promise.reject('b'),
|
|
addExpectationResult: addExpectationResult,
|
|
util: util
|
|
});
|
|
|
|
return expectation
|
|
.withContext('Some context')
|
|
.toBeResolvedTo('a')
|
|
.then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
false,
|
|
jasmine.objectContaining({
|
|
message:
|
|
"Some context: Expected a promise to be resolved to 'a' but it was rejected."
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
it('prepends the context to a custom failure message from a function', function() {
|
|
pending('should actually work, but no custom matchers for async yet');
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var util = {
|
|
buildFailureMessage: function() {
|
|
return 'failure message';
|
|
}
|
|
},
|
|
addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
actual = Promise.reject(),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
actual: actual,
|
|
addExpectationResult: addExpectationResult,
|
|
util: util
|
|
});
|
|
|
|
return expectation
|
|
.withContext('Some context')
|
|
.toBeResolved()
|
|
.then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
false,
|
|
jasmine.objectContaining({
|
|
message: 'Some context: msg'
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
it('works with #not', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
actual = Promise.resolve(),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
actual: actual,
|
|
addExpectationResult: addExpectationResult,
|
|
util: jasmineUnderTest.matchersUtil
|
|
});
|
|
|
|
return expectation
|
|
.withContext('Some context')
|
|
.not.toBeResolved()
|
|
.then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
false,
|
|
jasmine.objectContaining({
|
|
message: 'Some context: Expected a promise not to be resolved.'
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
it('works with #not and a custom message', function() {
|
|
jasmine.getEnv().requirePromises();
|
|
|
|
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
|
actual = Promise.resolve('a'),
|
|
expectation = jasmineUnderTest.Expectation.asyncFactory({
|
|
actual: actual,
|
|
addExpectationResult: addExpectationResult,
|
|
util: jasmineUnderTest.matchersUtil
|
|
});
|
|
|
|
return expectation
|
|
.withContext('Some context')
|
|
.not.toBeResolvedTo('a')
|
|
.then(function() {
|
|
expect(addExpectationResult).toHaveBeenCalledWith(
|
|
false,
|
|
jasmine.objectContaining({
|
|
message:
|
|
"Some context: Expected a promise not to be resolved to 'a'."
|
|
})
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
function dummyPromise() {
|
|
return new Promise(function(resolve, reject) {});
|
|
}
|
|
});
|