Merge branch 'master' into expect-context
This commit is contained in:
397
spec/core/AsyncExpectationSpec.js
Normal file
397
spec/core/AsyncExpectationSpec.js
Normal file
@@ -0,0 +1,397 @@
|
||||
describe('AsyncExpectation', function() {
|
||||
describe('Factory', function() {
|
||||
it('throws an Error if promises are not available', function() {
|
||||
var thenable = {then: function() {}},
|
||||
options = {global: {}, actual: thenable}
|
||||
function f() { jasmineUnderTest.AsyncExpectation.factory(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.AsyncExpectation.factory({actual: 'not a promise'});
|
||||
}
|
||||
expect(f).toThrowError('Expected expectAsync to be called with a promise.');
|
||||
});
|
||||
});
|
||||
|
||||
describe('#toBeResolved', function() {
|
||||
it('passes if the actual is resolved', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
actual = Promise.resolve(),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolved().then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(true, {
|
||||
matcherName: 'toBeResolved',
|
||||
passed: true,
|
||||
message: '',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('fails if the actual is rejected', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
actual = Promise.reject('AsyncExpectationSpec rejection'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolved().then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
||||
matcherName: 'toBeResolved',
|
||||
passed: false,
|
||||
message: 'Expected a promise to be resolved.',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#toBeRejected', function() {
|
||||
it('passes if the actual is rejected', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
actual = Promise.reject('AsyncExpectationSpec rejection'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeRejected().then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(true, {
|
||||
matcherName: 'toBeRejected',
|
||||
passed: true,
|
||||
message: '',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('fails if the actual is resolved', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
actual = Promise.resolve(),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeRejected().then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
||||
matcherName: 'toBeRejected',
|
||||
passed: false,
|
||||
message: 'Expected a promise to be rejected.',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#toBeRejectedWith', function () {
|
||||
it('should return true if the promise is rejected with the expected value', function () {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var actual = Promise.reject({error: 'PEBCAK'});
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeRejectedWith({error: 'PEBCAK'}).then(function () {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(true, {
|
||||
matcherName: 'toBeRejectedWith',
|
||||
passed: true,
|
||||
message: '',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
it('should fail if the promise resolves', function () {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var actual = Promise.resolve('AsyncExpectation error');
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeRejectedWith('').then(function () {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
||||
matcherName: 'toBeRejectedWith',
|
||||
passed: false,
|
||||
message: "Expected a promise to be rejected with '' but it was resolved.",
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should fail if the promise is rejected with a different value', function () {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var actual = Promise.reject('A Bad Apple');
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeRejectedWith('Some Cool Thing').then(function () {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
||||
matcherName: 'toBeRejectedWith',
|
||||
passed: false,
|
||||
message: "Expected a promise to be rejected with 'Some Cool Thing' but it was rejected with 'A Bad Apple'.",
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should build its error correctly when negated', function () {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = jasmineUnderTest.AsyncExpectation.factory({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: Promise.reject(true),
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.not.toBeRejectedWith(true).then(function () {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
passed: false,
|
||||
message: 'Expected a promise not to be rejected with true.'
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('should support custom equality testers', function () {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
customEqualityTesters: [function() { return true; }],
|
||||
actual: Promise.reject('actual'),
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeRejectedWith('expected').then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(true,
|
||||
jasmine.objectContaining({passed: true}));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#toBeResolvedTo', function() {
|
||||
it('passes if the promise is resolved to the expected value', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var actual = Promise.resolve({foo: 42});
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolvedTo({foo: 42}).then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(true, {
|
||||
matcherName: 'toBeResolvedTo',
|
||||
passed: true,
|
||||
message: '',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('fails if the promise is rejected', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var actual = Promise.reject('AsyncExpectationSpec error');
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolvedTo('').then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
||||
matcherName: 'toBeResolvedTo',
|
||||
passed: false,
|
||||
message: "Expected a promise to be resolved to '' but it was rejected.",
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('fails if the promise is resolved to a different value', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var actual = Promise.resolve({foo: 17});
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolvedTo({foo: 42}).then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
||||
matcherName: 'toBeResolvedTo',
|
||||
passed: false,
|
||||
message: 'Expected a promise to be resolved to Object({ foo: 42 }) but it was resolved to Object({ foo: 17 }).',
|
||||
error: undefined,
|
||||
errorForStack: jasmine.any(Error),
|
||||
actual: actual
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('builds its message correctly when negated', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = jasmineUnderTest.AsyncExpectation.factory({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
actual: Promise.resolve(true),
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.not.toBeResolvedTo(true).then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
passed: false,
|
||||
message: 'Expected a promise not to be resolved to true.'
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('supports custom equality testers', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
util: jasmineUnderTest.matchersUtil,
|
||||
customEqualityTesters: [function() { return true; }],
|
||||
actual: Promise.resolve('actual'),
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolvedTo('expected').then(function() {
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(true,
|
||||
jasmine.objectContaining({passed: true}));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#not', function() {
|
||||
it('converts a pass to a fail', function() {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
actual = Promise.resolve(),
|
||||
expectation = jasmineUnderTest.AsyncExpectation.factory({
|
||||
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.AsyncExpectation.factory({
|
||||
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('AsyncExpectationSpec failure');
|
||||
|
||||
spyOn(jasmineUnderTest.AsyncExpectation.prototype, 'toBeResolved')
|
||||
.and.returnValue(Promise.reject(error));
|
||||
|
||||
var addExpectationResult = jasmine.createSpy('addExpectationResult'),
|
||||
actual = dummyPromise(),
|
||||
expectation = new jasmineUnderTest.AsyncExpectation({
|
||||
actual: actual,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
return expectation.toBeResolved()
|
||||
.then(
|
||||
function() { fail('Expected a rejection'); },
|
||||
function(e) { expect(e).toBe(error); }
|
||||
);
|
||||
});
|
||||
|
||||
function dummyPromise() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -27,7 +27,7 @@ describe("Env", function() {
|
||||
});
|
||||
|
||||
it('can configure specs to throw errors on expectation failures', function() {
|
||||
env.throwOnExpectationFailure(true);
|
||||
env.configure({oneFailurePerSpec: true});
|
||||
|
||||
spyOn(jasmineUnderTest, 'Spec');
|
||||
env.it('foo', function() {});
|
||||
@@ -37,7 +37,7 @@ describe("Env", function() {
|
||||
});
|
||||
|
||||
it('can configure suites to throw errors on expectation failures', function() {
|
||||
env.throwOnExpectationFailure(true);
|
||||
env.configure({oneFailurePerSpec: true});
|
||||
|
||||
spyOn(jasmineUnderTest, 'Suite');
|
||||
env.describe('foo', function() {});
|
||||
@@ -46,6 +46,22 @@ describe("Env", function() {
|
||||
}));
|
||||
});
|
||||
|
||||
it('defaults to multiple failures for specs', function() {
|
||||
spyOn(jasmineUnderTest, 'Spec');
|
||||
env.it('bar', function() {});
|
||||
expect(jasmineUnderTest.Spec).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
throwOnExpectationFailure: false
|
||||
}));
|
||||
});
|
||||
|
||||
it('defaults to multiple failures for suites', function() {
|
||||
spyOn(jasmineUnderTest, 'Suite');
|
||||
env.describe('foo', function() {});
|
||||
expect(jasmineUnderTest.Suite).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
throwOnExpectationFailure: false
|
||||
}));
|
||||
});
|
||||
|
||||
describe('#describe', function () {
|
||||
it("throws an error when given arguments", function() {
|
||||
expect(function() {
|
||||
|
||||
@@ -37,6 +37,28 @@ describe("ExceptionFormatter", function() {
|
||||
expect(message).toEqual('A Classic Mistake: you got your foo in my bar');
|
||||
});
|
||||
|
||||
it('formats unnamed exceptions with message', function() {
|
||||
var unnamedError = {message: 'This is an unnamed error message.'};
|
||||
|
||||
var exceptionFormatter = new jasmineUnderTest.ExceptionFormatter(),
|
||||
message = exceptionFormatter.message(unnamedError);
|
||||
|
||||
expect(message).toEqual('This is an unnamed error message.');
|
||||
});
|
||||
|
||||
it('formats empty exceptions with toString format', function() {
|
||||
var EmptyError = function() {};
|
||||
EmptyError.prototype.toString = function() {
|
||||
return '[EmptyError]';
|
||||
};
|
||||
var emptyError = new EmptyError();
|
||||
|
||||
var exceptionFormatter = new jasmineUnderTest.ExceptionFormatter(),
|
||||
message = exceptionFormatter.message(emptyError);
|
||||
|
||||
expect(message).toEqual('[EmptyError] thrown');
|
||||
});
|
||||
|
||||
it("formats thrown exceptions that aren't errors", function() {
|
||||
var thrown = "crazy error",
|
||||
exceptionFormatter = new jasmineUnderTest.ExceptionFormatter(),
|
||||
|
||||
@@ -44,6 +44,21 @@ describe("buildExpectationResult", function() {
|
||||
expect(result.stack).toEqual('foo');
|
||||
});
|
||||
|
||||
it("delegates stack formatting to the provided formatter if there was a provided errorForStack", function() {
|
||||
var fakeError = {stack: 'foo'},
|
||||
stackFormatter = jasmine.createSpy("stack formatter").and.returnValue(fakeError.stack);
|
||||
|
||||
var result = jasmineUnderTest.buildExpectationResult(
|
||||
{
|
||||
passed: false,
|
||||
errorForStack: fakeError,
|
||||
stackFormatter: stackFormatter
|
||||
});
|
||||
|
||||
expect(stackFormatter).toHaveBeenCalledWith(fakeError);
|
||||
expect(result.stack).toEqual('foo');
|
||||
});
|
||||
|
||||
it("matcherName returns passed matcherName", function() {
|
||||
var result = jasmineUnderTest.buildExpectationResult({matcherName: 'some-value'});
|
||||
expect(result.matcherName).toBe('some-value');
|
||||
|
||||
@@ -33,7 +33,9 @@ describe("Expectation", function() {
|
||||
matchers = {
|
||||
toFoo: matcherFactory
|
||||
},
|
||||
util = {},
|
||||
util = {
|
||||
buildFailureMessage: jasmine.createSpy('buildFailureMessage')
|
||||
},
|
||||
customEqualityTesters = ['a'],
|
||||
addExpectationResult = jasmine.createSpy("addExpectationResult"),
|
||||
expectation;
|
||||
@@ -380,7 +382,7 @@ describe("Expectation", function() {
|
||||
error: undefined
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it("reports a custom error message to the spec", function() {
|
||||
var customError = new Error("I am a custom error");
|
||||
var matchers = {
|
||||
@@ -508,9 +510,9 @@ describe("Expectation", function() {
|
||||
actual: "an actual",
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
|
||||
expectation.withContext("Some context").toFoo("hello");
|
||||
|
||||
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
message: "Some context: failure message"
|
||||
@@ -532,9 +534,9 @@ describe("Expectation", function() {
|
||||
actual: "an actual",
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
|
||||
expectation.withContext("Some context").toFoo("hello");
|
||||
|
||||
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
message: "Some context: msg"
|
||||
@@ -561,9 +563,9 @@ describe("Expectation", function() {
|
||||
actual: "an actual",
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
|
||||
expectation.withContext("Some context").toFoo("hello");
|
||||
|
||||
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
message: "Some context: msg"
|
||||
@@ -586,9 +588,9 @@ describe("Expectation", function() {
|
||||
actual: "an actual",
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
|
||||
expectation.withContext("Some context").not.toFoo();
|
||||
|
||||
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
message: "Some context: Expected 'an actual' not to foo."
|
||||
@@ -617,10 +619,10 @@ describe("Expectation", function() {
|
||||
customMatchers: matchers,
|
||||
addExpectationResult: addExpectationResult
|
||||
});
|
||||
|
||||
|
||||
expectation.withContext("Some context").not.toFoo("hello");
|
||||
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
|
||||
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||
jasmine.objectContaining({
|
||||
message: "Some context: I am a custom message",
|
||||
})
|
||||
|
||||
@@ -183,7 +183,7 @@ describe("QueueRunner", function() {
|
||||
|
||||
it("sets a timeout if requested for asynchronous functions so they don't go on forever", function() {
|
||||
var timeout = 3,
|
||||
beforeFn = { fn: function(done) { }, type: 'before', timeout: function() { return timeout; } },
|
||||
beforeFn = { fn: function(done) { }, type: 'before', timeout: timeout },
|
||||
queueableFn = { fn: jasmine.createSpy('fn'), type: 'queueable' },
|
||||
onComplete = jasmine.createSpy('onComplete'),
|
||||
onException = jasmine.createSpy('onException'),
|
||||
@@ -304,7 +304,7 @@ describe("QueueRunner", function() {
|
||||
});
|
||||
|
||||
it("continues running functions when an exception is thrown in async code without timing out", function() {
|
||||
var queueableFn = { fn: function(done) { throwAsync(); }, timeout: function() { return 1; } },
|
||||
var queueableFn = { fn: function(done) { throwAsync(); }, timeout: 1 },
|
||||
nextQueueableFn = { fn: jasmine.createSpy("nextFunction") },
|
||||
onException = jasmine.createSpy('onException'),
|
||||
globalErrors = { pushListener: jasmine.createSpy('pushListener'), popListener: jasmine.createSpy('popListener') },
|
||||
@@ -481,15 +481,18 @@ describe("QueueRunner", function() {
|
||||
var queueableFn = { fn: function() { throw new Error("error"); } },
|
||||
nextQueueableFn = { fn: jasmine.createSpy("nextFunction") },
|
||||
cleanupFn = { fn: jasmine.createSpy("cleanup") },
|
||||
onComplete = jasmine.createSpy("onComplete"),
|
||||
queueRunner = new jasmineUnderTest.QueueRunner({
|
||||
queueableFns: [queueableFn, nextQueueableFn],
|
||||
cleanupFns: [cleanupFn],
|
||||
onComplete: onComplete,
|
||||
completeOnFirstError: true
|
||||
});
|
||||
|
||||
queueRunner.execute();
|
||||
expect(nextQueueableFn.fn).not.toHaveBeenCalled();
|
||||
expect(cleanupFn.fn).toHaveBeenCalled();
|
||||
expect(onComplete).toHaveBeenCalledWith(jasmine.any(jasmineUnderTest.StopExecutionError));
|
||||
});
|
||||
|
||||
it("does not skip when a cleanup function throws", function() {
|
||||
|
||||
@@ -214,6 +214,97 @@ describe("SpyRegistry", function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe("#spyOnAllFunctions", function() {
|
||||
it("checks for the existence of the object", function() {
|
||||
var spyRegistry = new jasmineUnderTest.SpyRegistry();
|
||||
expect(function() {
|
||||
spyRegistry.spyOnAllFunctions(void 0);
|
||||
}).toThrowError(/spyOnAllFunctions could not find an object to spy upon/);
|
||||
});
|
||||
|
||||
it("overrides all writable and configurable functions of the object", function() {
|
||||
var spyRegistry = new jasmineUnderTest.SpyRegistry({createSpy: function() {
|
||||
return 'I am a spy';
|
||||
}});
|
||||
var createNoop = function() { return function() { /**/}; };
|
||||
var noop1 = createNoop();
|
||||
var noop2 = createNoop();
|
||||
var noop3 = createNoop();
|
||||
var noop4 = createNoop();
|
||||
var noop5 = createNoop();
|
||||
|
||||
var parent = {
|
||||
notSpied1: noop1
|
||||
};
|
||||
var subject = Object.create(parent);
|
||||
Object.defineProperty(subject, 'spied1', {
|
||||
value: noop1,
|
||||
writable: true,
|
||||
configurable: true,
|
||||
enumerable: true
|
||||
});
|
||||
Object.defineProperty(subject, 'spied2', {
|
||||
value: noop2,
|
||||
writable: true,
|
||||
configurable: true,
|
||||
enumerable: true
|
||||
});
|
||||
var _spied3 = noop3;
|
||||
Object.defineProperty(subject, 'spied3', {
|
||||
configurable: true,
|
||||
set: function (val) {
|
||||
_spied3 = val;
|
||||
},
|
||||
get: function() {
|
||||
return _spied3;
|
||||
},
|
||||
enumerable: true
|
||||
});
|
||||
subject.spied4 = noop4;
|
||||
Object.defineProperty(subject, 'notSpied2', {
|
||||
value: noop2,
|
||||
writable: false,
|
||||
configurable: true,
|
||||
enumerable: true
|
||||
});
|
||||
Object.defineProperty(subject, 'notSpied3', {
|
||||
value: noop3,
|
||||
writable: true,
|
||||
configurable: false,
|
||||
enumerable: true
|
||||
});
|
||||
Object.defineProperty(subject, 'notSpied4', {
|
||||
configurable: false,
|
||||
set: function(val) { /**/ },
|
||||
get: function() {
|
||||
return noop4;
|
||||
},
|
||||
enumerable: true
|
||||
});
|
||||
Object.defineProperty(subject, 'notSpied5', {
|
||||
value: noop5,
|
||||
writable: true,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
});
|
||||
subject.notSpied6 = 6;
|
||||
|
||||
var spiedObject = spyRegistry.spyOnAllFunctions(subject);
|
||||
|
||||
expect(subject.notSpied1).toBe(noop1);
|
||||
expect(subject.notSpied2).toBe(noop2);
|
||||
expect(subject.notSpied3).toBe(noop3);
|
||||
expect(subject.notSpied4).toBe(noop4);
|
||||
expect(subject.notSpied5).toBe(noop5);
|
||||
expect(subject.notSpied6).toBe(6);
|
||||
expect(subject.spied1).toBe('I am a spy');
|
||||
expect(subject.spied2).toBe('I am a spy');
|
||||
expect(subject.spied3).toBe('I am a spy');
|
||||
expect(subject.spied4).toBe('I am a spy');
|
||||
expect(spiedObject).toBe(subject);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#clearSpies", function() {
|
||||
it("restores the original functions on the spied-upon objects", function() {
|
||||
var spies = [],
|
||||
|
||||
@@ -297,7 +297,7 @@ describe("TreeProcessor", function() {
|
||||
node.getResult.and.returnValue({ my: 'result' });
|
||||
|
||||
queueRunner.calls.mostRecent().args[0].onComplete();
|
||||
expect(nodeComplete).toHaveBeenCalledWith(node, { my: 'result' }, nodeDone);
|
||||
expect(nodeComplete).toHaveBeenCalledWith(node, { my: 'result' }, jasmine.any(Function));
|
||||
});
|
||||
|
||||
it("runs a node with children", function() {
|
||||
@@ -328,6 +328,37 @@ describe("TreeProcessor", function() {
|
||||
expect(leaf2.execute).toHaveBeenCalledWith('bar', false);
|
||||
});
|
||||
|
||||
it("cascades errors up the tree", function() {
|
||||
var leaf = new Leaf(),
|
||||
node = new Node({ children: [leaf] }),
|
||||
root = new Node({ children: [node] }),
|
||||
queueRunner = jasmine.createSpy('queueRunner'),
|
||||
nodeComplete = jasmine.createSpy('nodeComplete'),
|
||||
processor = new jasmineUnderTest.TreeProcessor({
|
||||
tree: root,
|
||||
runnableIds: [node.id],
|
||||
nodeComplete: nodeComplete,
|
||||
queueRunnerFactory: queueRunner
|
||||
}),
|
||||
treeComplete = jasmine.createSpy('treeComplete'),
|
||||
nodeDone = jasmine.createSpy('nodeDone');
|
||||
|
||||
processor.execute(treeComplete);
|
||||
var queueableFns = queueRunner.calls.mostRecent().args[0].queueableFns;
|
||||
queueableFns[0].fn(nodeDone);
|
||||
|
||||
queueableFns = queueRunner.calls.mostRecent().args[0].queueableFns;
|
||||
expect(queueableFns.length).toBe(2);
|
||||
|
||||
queueableFns[1].fn('foo');
|
||||
expect(leaf.execute).toHaveBeenCalledWith('foo', false);
|
||||
|
||||
queueRunner.calls.mostRecent().args[0].onComplete('things');
|
||||
expect(nodeComplete).toHaveBeenCalled();
|
||||
nodeComplete.calls.mostRecent().args[2]();
|
||||
expect(nodeDone).toHaveBeenCalledWith('things');
|
||||
});
|
||||
|
||||
it("runs an excluded node with leaf", function() {
|
||||
var leaf1 = new Leaf(),
|
||||
node = new Node({ children: [leaf1] }),
|
||||
@@ -361,7 +392,7 @@ describe("TreeProcessor", function() {
|
||||
node.getResult.and.returnValue({ im: 'disabled' });
|
||||
|
||||
queueRunner.calls.mostRecent().args[0].onComplete();
|
||||
expect(nodeComplete).toHaveBeenCalledWith(node, { im: 'disabled' }, nodeDone);
|
||||
expect(nodeComplete).toHaveBeenCalledWith(node, { im: 'disabled' }, jasmine.any(Function));
|
||||
});
|
||||
|
||||
it("runs beforeAlls for a node with children", function() {
|
||||
|
||||
@@ -31,6 +31,105 @@ describe("jasmineUnderTest.util", function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe("promise utils", function () {
|
||||
|
||||
var mockNativePromise,
|
||||
mockPromiseLikeObject;
|
||||
|
||||
var mockPromiseLike = function () {this.then = function () {};};
|
||||
|
||||
beforeEach(function () {
|
||||
jasmine.getEnv().requirePromises();
|
||||
mockNativePromise = new Promise(function (res, rej) {});
|
||||
mockPromiseLikeObject = new mockPromiseLike();
|
||||
});
|
||||
|
||||
describe("isPromise", function () {
|
||||
|
||||
it("should return true when passed a native promise", function () {
|
||||
expect(jasmineUnderTest.isPromise(mockNativePromise)).toBe(true);
|
||||
});
|
||||
|
||||
it("should return false for promise like objects", function () {
|
||||
expect(jasmineUnderTest.isPromise(mockPromiseLikeObject)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for strings", function () {
|
||||
expect(jasmineUnderTest.isPromise("hello")).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for numbers", function () {
|
||||
expect(jasmineUnderTest.isPromise(3)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for null", function () {
|
||||
expect(jasmineUnderTest.isPromise(null)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for undefined", function () {
|
||||
expect(jasmineUnderTest.isPromise(undefined)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for arrays", function () {
|
||||
expect(jasmineUnderTest.isPromise([])).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for objects", function () {
|
||||
expect(jasmineUnderTest.isPromise({})).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for boolean values", function () {
|
||||
expect(jasmineUnderTest.isPromise(true)).toBe(false);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe("isPromiseLike", function () {
|
||||
|
||||
it("should return true when passed a native promise", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike(mockNativePromise)).toBe(true);
|
||||
});
|
||||
|
||||
it("should return true for promise like objects", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike(mockPromiseLikeObject)).toBe(true);
|
||||
});
|
||||
|
||||
it("should return false if then is not a function", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike({then:{its:"Not a function :O"}})).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for strings", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike("hello")).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for numbers", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike(3)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for null", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike(null)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for undefined", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike(undefined)).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for arrays", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike([])).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for objects", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike({})).toBe(false);
|
||||
});
|
||||
|
||||
it("should return false for boolean values", function () {
|
||||
expect(jasmineUnderTest.isPromiseLike(true)).toBe(false);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe("isUndefined", function() {
|
||||
it("reports if a variable is defined", function() {
|
||||
var a;
|
||||
|
||||
@@ -4,7 +4,7 @@ describe("Custom Matchers (Integration)", function() {
|
||||
|
||||
beforeEach(function() {
|
||||
env = new jasmineUnderTest.Env();
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
});
|
||||
|
||||
it("allows adding more matchers local to a spec", function(done) {
|
||||
|
||||
@@ -3,7 +3,7 @@ describe('Custom Spy Strategies (Integration)', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
env = new jasmineUnderTest.Env();
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
});
|
||||
|
||||
it('allows adding more strategies local to a suite', function(done) {
|
||||
|
||||
@@ -17,7 +17,7 @@ describe("Env integration", function() {
|
||||
};
|
||||
|
||||
env.addReporter({ jasmineDone: assertions});
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("A Suite", function() {
|
||||
env.it("with a spec", function() {
|
||||
@@ -46,7 +46,7 @@ describe("Env integration", function() {
|
||||
};
|
||||
|
||||
env.addReporter({ jasmineDone: assertions });
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("Outer suite", function() {
|
||||
env.it("an outer spec", function() {
|
||||
@@ -81,7 +81,7 @@ describe("Env integration", function() {
|
||||
};
|
||||
|
||||
env.addReporter({ jasmineDone: assertions });
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
|
||||
env.describe("Outer suite", function() {
|
||||
@@ -200,7 +200,7 @@ describe("Env integration", function() {
|
||||
var env = new jasmineUnderTest.Env();
|
||||
|
||||
env.addReporter({jasmineDone: done});
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
env.describe("tests", function() {
|
||||
var firstTimeThrough = true, firstSpecContext, secondSpecContext;
|
||||
|
||||
@@ -783,9 +783,11 @@ describe("Env integration", function() {
|
||||
});
|
||||
});
|
||||
|
||||
env.specFilter = function(spec) {
|
||||
return /^first suite/.test(spec.getFullName());
|
||||
};
|
||||
env.configure({
|
||||
specFilter: function(spec) {
|
||||
return /^first suite/.test(spec.getFullName());
|
||||
}
|
||||
});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
@@ -953,7 +955,7 @@ describe("Env integration", function() {
|
||||
};
|
||||
|
||||
env.addReporter({ jasmineDone: assertions });
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("tests", function() {
|
||||
env.it("test with mock clock", function() {
|
||||
@@ -1106,17 +1108,15 @@ describe("Env integration", function() {
|
||||
|
||||
it('should wait a custom interval before reporting async functions that fail to call done', function(done) {
|
||||
var env = createMockedEnv(),
|
||||
reporter = jasmine.createSpyObj('fakeReport', ['jasmineDone', 'suiteDone', 'specDone']),
|
||||
timeoutFailure = (/^Error: Timeout - Async callback was not invoked within timeout specified by jasmine\.DEFAULT_TIMEOUT_INTERVAL\./);
|
||||
|
||||
reporter = jasmine.createSpyObj('fakeReport', ['jasmineDone', 'suiteDone', 'specDone']);
|
||||
|
||||
reporter.jasmineDone.and.callFake(function(r) {
|
||||
expect(r.failedExpectations).toEqual([]);
|
||||
expect(reporter.suiteDone).toHaveFailedExpectationsForRunnable('suite beforeAll', [ timeoutFailure ]);
|
||||
expect(reporter.suiteDone).toHaveFailedExpectationsForRunnable('suite afterAll', [ timeoutFailure ]);
|
||||
expect(reporter.specDone).toHaveFailedExpectationsForRunnable('suite beforeEach times out', [ timeoutFailure ]);
|
||||
expect(reporter.specDone).toHaveFailedExpectationsForRunnable('suite afterEach times out', [ timeoutFailure ]);
|
||||
expect(reporter.specDone).toHaveFailedExpectationsForRunnable('suite it times out', [ timeoutFailure ]);
|
||||
expect(reporter.suiteDone).toHaveFailedExpectationsForRunnable('suite beforeAll', [ /^Error: Timeout - Async callback was not invoked within 5000ms \(custom timeout\)/ ]);
|
||||
expect(reporter.suiteDone).toHaveFailedExpectationsForRunnable('suite afterAll', [ /^Error: Timeout - Async callback was not invoked within 2000ms \(custom timeout\)/ ]);
|
||||
expect(reporter.specDone).toHaveFailedExpectationsForRunnable('suite beforeEach times out', [/^Error: Timeout - Async callback was not invoked within 1000ms \(custom timeout\)/]);
|
||||
expect(reporter.specDone).toHaveFailedExpectationsForRunnable('suite afterEach times out', [ /^Error: Timeout - Async callback was not invoked within 4000ms \(custom timeout\)/ ]);
|
||||
expect(reporter.specDone).toHaveFailedExpectationsForRunnable('suite it times out', [ /^Error: Timeout - Async callback was not invoked within 6000ms \(custom timeout\)/ ]);
|
||||
|
||||
jasmine.clock().tick(1);
|
||||
realSetTimeout(done);
|
||||
@@ -1478,8 +1478,7 @@ describe("Env integration", function() {
|
||||
"specStarted",
|
||||
"specDone"
|
||||
]);
|
||||
env.randomizeTests(true);
|
||||
env.seed('123456');
|
||||
env.configure({random: true, seed: '123456'});
|
||||
|
||||
reporter.jasmineDone.and.callFake(function(doneArg) {
|
||||
expect(reporter.jasmineStarted).toHaveBeenCalled();
|
||||
@@ -1493,7 +1492,7 @@ describe("Env integration", function() {
|
||||
});
|
||||
|
||||
env.addReporter(reporter);
|
||||
env.randomizeTests(true);
|
||||
env.configure({random: true});
|
||||
env.execute();
|
||||
});
|
||||
|
||||
@@ -1664,7 +1663,7 @@ describe("Env integration", function() {
|
||||
});
|
||||
|
||||
env.addReporter(reporter);
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("testing custom equality testers", function() {
|
||||
env.it("with a custom tester", function() {
|
||||
@@ -1700,7 +1699,7 @@ describe("Env integration", function() {
|
||||
});
|
||||
|
||||
env.addReporter(reporter);
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("testing custom equality testers", function() {
|
||||
env.beforeAll(function() { env.addCustomEqualityTester(function(a, b) { return true; }); });
|
||||
@@ -1741,7 +1740,7 @@ describe("Env integration", function() {
|
||||
});
|
||||
|
||||
env.addReporter(reporter);
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("testing custom equality testers", function() {
|
||||
env.it("with a custom tester", function() {
|
||||
@@ -1794,7 +1793,7 @@ describe("Env integration", function() {
|
||||
});
|
||||
|
||||
env.addReporter(reporter);
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
|
||||
env.describe("testing custom equality testers", function() {
|
||||
env.beforeAll(function() { env.addCustomEqualityTester(function(a, b) { return true; })});
|
||||
@@ -2415,4 +2414,106 @@ describe("Env integration", function() {
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it('supports async matchers', function(done) {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var env = new jasmineUnderTest.Env(),
|
||||
specDone = jasmine.createSpy('specDone'),
|
||||
suiteDone = jasmine.createSpy('suiteDone');
|
||||
|
||||
env.addReporter({
|
||||
specDone: specDone,
|
||||
suiteDone: suiteDone,
|
||||
jasmineDone: function(result) {
|
||||
expect(result.failedExpectations).toEqual([jasmine.objectContaining({
|
||||
message: 'Expected a promise to be rejected.'
|
||||
})]);
|
||||
|
||||
expect(specDone).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
description: 'has an async failure',
|
||||
failedExpectations: [jasmine.objectContaining({
|
||||
message: 'Expected a promise to be rejected.'
|
||||
})]
|
||||
}));
|
||||
|
||||
expect(suiteDone).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
description: 'a suite',
|
||||
failedExpectations: [jasmine.objectContaining({
|
||||
message: 'Expected a promise to be rejected.'
|
||||
})]
|
||||
}));
|
||||
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
function fail(innerDone) {
|
||||
var resolve;
|
||||
var p = new Promise(function(res, rej) { resolve = res });
|
||||
env.expectAsync(p).toBeRejected().then(innerDone);
|
||||
resolve();
|
||||
}
|
||||
|
||||
env.afterAll(fail);
|
||||
env.describe('a suite', function() {
|
||||
env.afterAll(fail);
|
||||
env.it('has an async failure', fail);
|
||||
});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it('provides custom equality testers to async matchers', function(done) {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var env = new jasmineUnderTest.Env(),
|
||||
specDone = jasmine.createSpy('specDone');
|
||||
|
||||
env.addReporter({
|
||||
specDone: specDone,
|
||||
jasmineDone: function() {
|
||||
expect(specDone).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
description: 'has an async failure',
|
||||
failedExpectations: []
|
||||
}));
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
env.it('has an async failure', function() {
|
||||
env.addCustomEqualityTester(function() { return true; });
|
||||
var p = Promise.resolve('something');
|
||||
return env.expectAsync(p).toBeResolvedTo('something else');
|
||||
});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it('includes useful stack frames in async matcher failures', function(done) {
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var env = new jasmineUnderTest.Env(),
|
||||
specDone = jasmine.createSpy('specDone');
|
||||
|
||||
env.addReporter({
|
||||
specDone: specDone,
|
||||
jasmineDone: function() {
|
||||
expect(specDone).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
failedExpectations: [jasmine.objectContaining({
|
||||
stack: jasmine.stringMatching('EnvSpec.js')
|
||||
})]
|
||||
}));
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
env.it('has an async failure', function() {
|
||||
env.addCustomEqualityTester(function() { return true; });
|
||||
var p = Promise.resolve();
|
||||
return env.expectAsync(p).toBeRejected();
|
||||
});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,7 +4,7 @@ describe("spec running", function () {
|
||||
beforeEach(function() {
|
||||
jasmine.getEnv().registerIntegrationMatchers();
|
||||
env = new jasmineUnderTest.Env();
|
||||
env.randomizeTests(false);
|
||||
env.configure({random: false});
|
||||
});
|
||||
|
||||
it('should assign spec ids sequentially', function() {
|
||||
@@ -740,8 +740,7 @@ describe("spec running", function () {
|
||||
|
||||
it("should run the tests in a consistent order when a seed is supplied", function(done) {
|
||||
var actions = [];
|
||||
env.seed('123456');
|
||||
env.randomizeTests(true);
|
||||
env.configure({random: true, seed: '123456'});
|
||||
|
||||
env.beforeEach(function () {
|
||||
actions.push('topSuite beforeEach');
|
||||
@@ -865,7 +864,7 @@ describe("spec running", function () {
|
||||
});
|
||||
});
|
||||
|
||||
env.throwOnExpectationFailure(true);
|
||||
env.configure({oneFailurePerSpec: true});
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual([
|
||||
@@ -900,7 +899,7 @@ describe("spec running", function () {
|
||||
});
|
||||
});
|
||||
|
||||
env.throwOnExpectationFailure(true);
|
||||
env.configure({oneFailurePerSpec: true});
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual([
|
||||
@@ -932,7 +931,7 @@ describe("spec running", function () {
|
||||
});
|
||||
});
|
||||
|
||||
env.throwOnExpectationFailure(true);
|
||||
env.configure({oneFailurePerSpec: true});
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual([
|
||||
@@ -946,23 +945,145 @@ describe("spec running", function () {
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it("skips to cleanup functions after an error with deprecations", function(done) {
|
||||
var actions = [];
|
||||
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
env.describe('Something', function() {
|
||||
env.beforeEach(function() {
|
||||
actions.push('outer beforeEach');
|
||||
throw new Error("error");
|
||||
});
|
||||
|
||||
env.afterEach(function() {
|
||||
actions.push('outer afterEach');
|
||||
});
|
||||
|
||||
env.describe('Inner', function() {
|
||||
env.beforeEach(function() {
|
||||
actions.push('inner beforeEach');
|
||||
});
|
||||
|
||||
env.afterEach(function() {
|
||||
actions.push('inner afterEach');
|
||||
});
|
||||
|
||||
env.it('does it' , function() {
|
||||
actions.push('inner it');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
env.throwOnExpectationFailure(true);
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual([
|
||||
'outer beforeEach',
|
||||
'inner afterEach',
|
||||
'outer afterEach'
|
||||
]);
|
||||
expect(env.deprecated).toHaveBeenCalled();
|
||||
done();
|
||||
};
|
||||
|
||||
env.addReporter({jasmineDone: assertions});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it("skips to cleanup functions after done.fail is called with deprecations", function(done) {
|
||||
var actions = [];
|
||||
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
env.describe('Something', function() {
|
||||
env.beforeEach(function(done) {
|
||||
actions.push('beforeEach');
|
||||
done.fail('error');
|
||||
actions.push('after done.fail');
|
||||
});
|
||||
|
||||
env.afterEach(function() {
|
||||
actions.push('afterEach');
|
||||
});
|
||||
|
||||
env.it('does it' , function() {
|
||||
actions.push('it');
|
||||
});
|
||||
});
|
||||
|
||||
env.throwOnExpectationFailure(true);
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual([
|
||||
'beforeEach',
|
||||
'afterEach'
|
||||
]);
|
||||
expect(env.deprecated).toHaveBeenCalled();
|
||||
done();
|
||||
};
|
||||
|
||||
env.addReporter({jasmineDone: assertions});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it("skips to cleanup functions when an async function times out with deprecations", function(done) {
|
||||
var actions = [];
|
||||
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
env.describe('Something', function() {
|
||||
env.beforeEach(function(innerDone) {
|
||||
actions.push('beforeEach');
|
||||
}, 1);
|
||||
|
||||
env.afterEach(function() {
|
||||
actions.push('afterEach');
|
||||
});
|
||||
|
||||
env.it('does it' , function() {
|
||||
actions.push('it');
|
||||
});
|
||||
});
|
||||
|
||||
env.throwOnExpectationFailure(true);
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual([
|
||||
'beforeEach',
|
||||
'afterEach'
|
||||
]);
|
||||
expect(env.deprecated).toHaveBeenCalled();
|
||||
done();
|
||||
};
|
||||
|
||||
env.addReporter({jasmineDone: assertions});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
});
|
||||
|
||||
describe("when stopOnSpecFailure is on", function() {
|
||||
it("does not run further specs when one fails", function(done) {
|
||||
var actions = [];
|
||||
|
||||
env.it('fails', function() {
|
||||
actions.push('fails');
|
||||
env.expect(1).toBe(2);
|
||||
env.describe('wrapper', function() {
|
||||
env.it('fails', function() {
|
||||
actions.push('fails');
|
||||
env.expect(1).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
env.it('does not run', function() {
|
||||
actions.push('does not run');
|
||||
env.describe('holder', function() {
|
||||
env.it('does not run', function() {
|
||||
actions.push('does not run');
|
||||
});
|
||||
});
|
||||
|
||||
env.randomizeTests(false);
|
||||
env.stopOnSpecFailure(true);
|
||||
env.configure({random: false, failFast: true});
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual(['fails']);
|
||||
@@ -972,5 +1093,36 @@ describe("spec running", function () {
|
||||
env.addReporter({ jasmineDone: assertions });
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it("does not run further specs when one fails when configured with deprecated option", function(done) {
|
||||
var actions = [];
|
||||
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
env.describe('wrapper', function() {
|
||||
env.it('fails', function() {
|
||||
actions.push('fails');
|
||||
env.expect(1).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
env.describe('holder', function() {
|
||||
env.it('does not run', function() {
|
||||
actions.push('does not run');
|
||||
});
|
||||
});
|
||||
|
||||
env.configure({random: false});
|
||||
env.stopOnSpecFailure(true);
|
||||
|
||||
var assertions = function() {
|
||||
expect(actions).toEqual(['fails']);
|
||||
expect(env.deprecated).toHaveBeenCalled();
|
||||
done();
|
||||
};
|
||||
|
||||
env.addReporter({ jasmineDone: assertions });
|
||||
env.execute();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,17 +1,56 @@
|
||||
describe("toBe", function() {
|
||||
it("passes when actual === expected", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(),
|
||||
it("passes with no message when actual === expected", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(jasmineUnderTest.matchersUtil),
|
||||
result;
|
||||
|
||||
result = matcher.compare(1, 1);
|
||||
expect(result.pass).toBe(true);
|
||||
});
|
||||
|
||||
it("fails when actual !== expected", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(),
|
||||
it("passes with a custom message when expected is an array", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(jasmineUnderTest.matchersUtil),
|
||||
result,
|
||||
array = [1];
|
||||
|
||||
result = matcher.compare(array, array);
|
||||
expect(result.pass).toBe(true);
|
||||
expect(result.message).toBe("Expected [ 1 ] not to be [ 1 ]. Tip: To check for deep equality, use .toEqual() instead of .toBe().")
|
||||
});
|
||||
|
||||
it("passes with a custom message when expected is an object", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(jasmineUnderTest.matchersUtil),
|
||||
result,
|
||||
obj = {foo: "bar"};
|
||||
|
||||
result = matcher.compare(obj, obj);
|
||||
expect(result.pass).toBe(true);
|
||||
expect(result.message).toBe("Expected Object({ foo: 'bar' }) not to be Object({ foo: 'bar' }). Tip: To check for deep equality, use .toEqual() instead of .toBe().")
|
||||
});
|
||||
|
||||
it("fails with no message when actual !== expected", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(jasmineUnderTest.matchersUtil),
|
||||
result;
|
||||
|
||||
result = matcher.compare(1, 2);
|
||||
expect(result.pass).toBe(false);
|
||||
expect(result.message).toBeUndefined();
|
||||
});
|
||||
|
||||
it("fails with a custom message when expected is an array", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(jasmineUnderTest.matchersUtil),
|
||||
result;
|
||||
|
||||
result = matcher.compare([1], [1]);
|
||||
expect(result.pass).toBe(false);
|
||||
expect(result.message).toBe("Expected [ 1 ] to be [ 1 ]. Tip: To check for deep equality, use .toEqual() instead of .toBe().")
|
||||
});
|
||||
|
||||
it("fails with a custom message when expected is an object", function() {
|
||||
var matcher = jasmineUnderTest.matchers.toBe(jasmineUnderTest.matchersUtil),
|
||||
result;
|
||||
|
||||
result = matcher.compare({foo: "bar"}, {foo: "bar"});
|
||||
expect(result.pass).toBe(false);
|
||||
expect(result.message).toBe("Expected Object({ foo: 'bar' }) to be Object({ foo: 'bar' }). Tip: To check for deep equality, use .toEqual() instead of .toBe().")
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user