- THere seems to be a performance regression. Large test suites may throw - Regressions: Mock Clock won't install correctly, async specs are temporarily not supported. - Async spec runs/waits interface is gone. Blocks are gone. - Move most global usage into jasmine.Env constructor. - Remove optional 'Jasmine running' from HtmlReporter -- caused NS_FACTORY_ERROR in firefox when tested
203 lines
5.7 KiB
JavaScript
203 lines
5.7 KiB
JavaScript
describe("Spec (integration)", function() {
|
|
it("reports results for passing tests", function() {
|
|
var resultCallback = jasmine.createSpy('resultCallback'),
|
|
expectationFactory = function(actual, spec) {
|
|
expect(actual).toBe('some-actual');
|
|
return {
|
|
pass: function() {
|
|
spec.addExpectationResult(true);
|
|
}
|
|
}
|
|
},
|
|
spec = new jasmine.Spec({
|
|
description: 'my test',
|
|
id: 'some-id',
|
|
fn: function() {
|
|
this.expect('some-actual').pass();
|
|
},
|
|
resultCallback: resultCallback,
|
|
expectationFactory: expectationFactory
|
|
});
|
|
|
|
spec.execute();
|
|
|
|
expect(resultCallback).toHaveBeenCalledWith({
|
|
id: "some-id",
|
|
status: "passed",
|
|
description: "my test",
|
|
failedExpectations: []
|
|
});
|
|
});
|
|
it("reports results for failing tests", function() {
|
|
var resultCallback = jasmine.createSpy('resultCallback'),
|
|
expectationFactory = function(actual, spec) {
|
|
expect(actual).toBe('some-actual');
|
|
return {
|
|
fail: function() {
|
|
spec.addExpectationResult(true);
|
|
}
|
|
}
|
|
},
|
|
spec = new jasmine.Spec({
|
|
description: 'my test',
|
|
id: 'some-id',
|
|
fn: function() {
|
|
this.expect('some-actual').fail();
|
|
},
|
|
resultCallback: resultCallback,
|
|
expectationFactory: expectationFactory
|
|
});
|
|
|
|
spec.execute();
|
|
|
|
expect(resultCallback).toHaveBeenCalledWith({
|
|
id: "some-id",
|
|
status: "passed",
|
|
description: "my test",
|
|
failedExpectations: []
|
|
});
|
|
});
|
|
|
|
//TODO: test order of befores, spec, after.
|
|
it("executes before fns, after fns", function() {
|
|
var before = jasmine.createSpy('before'),
|
|
after = jasmine.createSpy('after'),
|
|
fn = originalJasmine.createSpy('test body').andCallFake(function() {
|
|
expect(before).toHaveBeenCalled();
|
|
expect(after).not.toHaveBeenCalled();
|
|
});
|
|
spec = new jasmine.Spec({
|
|
fn: fn,
|
|
beforeFns: function() {
|
|
return [before]
|
|
},
|
|
afterFns: function() {
|
|
return [after]
|
|
}
|
|
});
|
|
|
|
spec.execute();
|
|
|
|
expect(before).toHaveBeenCalled();
|
|
expect(before.mostRecentCall.object).toBe(spec);
|
|
|
|
expect(fn).toHaveBeenCalled();
|
|
|
|
expect(after).toHaveBeenCalled();
|
|
expect(after.mostRecentCall.object).toBe(spec);
|
|
});
|
|
});
|
|
|
|
describe("Spec (real-ish unit tests)", function() {
|
|
it("status returns null by default", function() {
|
|
var spec = new jasmine.Spec({});
|
|
expect(spec.status()).toBeNull();
|
|
});
|
|
|
|
it("status returns passed if all expectations in the spec have passed", function() {
|
|
var spec = new jasmine.Spec({});
|
|
spec.addExpectationResult(true);
|
|
expect(spec.status()).toBe('passed');
|
|
});
|
|
|
|
it("status returns failed if any expectations in the spec have failed", function() {
|
|
var spec = new jasmine.Spec({});
|
|
spec.addExpectationResult(true);
|
|
spec.addExpectationResult(false);
|
|
expect(spec.status()).toBe('failed');
|
|
});
|
|
|
|
it("calls the resultCallback with a failure when an exception occurs in the spec fn", function() {
|
|
//TODO: one day we should pass a stack with this.
|
|
var resultCallback = originalJasmine.createSpy('resultCallback'),
|
|
spec = new jasmine.Spec({
|
|
fn: function() {
|
|
throw new Error();
|
|
},
|
|
catchExceptions: true,
|
|
resultCallback: resultCallback
|
|
});
|
|
|
|
expect(resultCallback).not.toHaveBeenCalled();
|
|
spec.execute();
|
|
expect(resultCallback).toHaveBeenCalledWith(
|
|
originalJasmine.objectContaining({status: 'failed'})
|
|
);
|
|
|
|
});
|
|
|
|
it("throws when an exception occurs in the spec fn if catchExceptions is false", function() {
|
|
//TODO: one day we should pass a stack with this.
|
|
var resultCallback = originalJasmine.createSpy('resultCallback'),
|
|
spec = new jasmine.Spec({
|
|
fn: function() {
|
|
throw new Error();
|
|
},
|
|
catchExceptions: false,
|
|
resultCallback: resultCallback
|
|
});
|
|
|
|
expect(function() {
|
|
spec.execute();
|
|
}).toThrow();
|
|
});
|
|
|
|
it("should call the start callback before any befores are called", function() {
|
|
var beforesWereCalled = false,
|
|
startCallback = originalJasmine.createSpy('start-callback').andCallFake(function() {
|
|
expect(beforesWereCalled).toBe(false);
|
|
}),
|
|
spec = new jasmine.Spec({
|
|
fn: function() {
|
|
},
|
|
beforeFns: function() {
|
|
return [function() {
|
|
beforesWereCalled = true
|
|
}]
|
|
},
|
|
startCallback: startCallback,
|
|
catchExceptions: false,
|
|
resultCallback: function() {
|
|
}
|
|
});
|
|
|
|
spec.execute();
|
|
expect(startCallback).toHaveBeenCalled();
|
|
});
|
|
|
|
it("can return its full name", function() {
|
|
//TODO: not convinced that a spec should provide this as part of its public interface, but adding temporarily
|
|
//until we fix the reporting
|
|
var spec = new jasmine.Spec({
|
|
fullNameFactory: function(passedVal) {
|
|
expect(passedVal).toBe(spec);
|
|
return 'expected val';
|
|
}
|
|
});
|
|
|
|
expect(spec.getFullName()).toBe('expected val');
|
|
});
|
|
|
|
it("can be disabled", function() {
|
|
var startCallback = jasmine.createSpy('startCallback'),
|
|
specBody = jasmine.createSpy('specBody'),
|
|
resultCallback = jasmine.createSpy('resultCallback'),
|
|
spec = new jasmine.Spec({
|
|
startCallback: startCallback,
|
|
fn: specBody,
|
|
resultCallback: resultCallback
|
|
|
|
});
|
|
|
|
spec.disable();
|
|
expect(spec.status()).toBe('disabled');
|
|
|
|
spec.execute();
|
|
|
|
expect(startCallback).not.toHaveBeenCalled();
|
|
expect(specBody).not.toHaveBeenCalled();
|
|
//TODO: with expected data.
|
|
expect(resultCallback).toHaveBeenCalled();
|
|
});
|
|
});
|