describe('async-callback', function() { var env; beforeEach(function() { env = new jasmine.Env(); }); describe('it', function() { it("should time out if callback is not called", function() { env.describe("it", function() { env.it("doesn't wait", function(done) { expect(1+2).toEqual(3); }); }); env.currentRunner().execute(); waitsFor(function() { return env.currentRunner().results().totalCount > 0; }, 6000); runs(function() { expect(env.currentRunner().results().failedCount).toEqual(1); expect(firstResult(env.currentRunner()).message).toMatch(/timeout/);; }); }); it("should accept timeout for individual spec", function() { env.describe("it", function() { env.it("doesn't wait", function(done) { expect(1+2).toEqual(3); }, 250); }); env.currentRunner().execute(); waitsFor(function() { return env.currentRunner().results().totalCount > 0; }, 500); runs(function() { expect(env.currentRunner().results().failedCount).toEqual(1); expect(firstResult(env.currentRunner()).message).toMatch(/timeout/);; }); }); it("should fail if callback is passed error", function() { env.describe("it", function() { env.it("doesn't wait", function(done) { process.nextTick(function() { done("Failed asynchronously"); }); }); }); env.currentRunner().execute(); waitsFor(function() { return env.currentRunner().results().totalCount > 0; }); runs(function() { expect(env.currentRunner().results().failedCount).toEqual(1); expect(firstResult(env.currentRunner()).message).toEqual("Failed asynchronously"); }); }); it("should finish after callback is called", function() { env.describe("it", function() { env.it("waits", function(done) { process.nextTick(function() { env.currentSpec.expect(1+2).toEqual(3); done(); }); }); }); env.currentRunner().execute(); waitsFor(function() { return env.currentRunner().results().totalCount > 0; }, 2000); runs(function() { expect(env.currentRunner().results().passedCount).toEqual(1); }); }); it('should run in the context of the current spec', function(){ var actualContext; var jasmineSpecContext; env.describe("it", function() { env.it("register context", function(done) { actualContext = this; jasmineSpecContext = env.currentSpec; env.expect(this).toBe(jasmineSpecContext); done(); }); }); env.currentRunner().execute(); waitsFor(function() { return env.currentRunner().results().totalCount > 0; }, 'tested jasmine env runner to run the test', 100); runs(function() { expect(actualContext).not.toBe(global); expect(actualContext).toBe(jasmineSpecContext); }); }); }); describe("beforeEach", function() { it("should wait for callback", function() { env.describe("beforeEach", function() { var waited = false; env.beforeEach(function(done) { process.nextTick(function() { waited = true; done(); }); }); env.it("waited", function() { env.currentSpec.expect(waited).toBeTruthy(); }); }); env.currentRunner().execute(); waitsFor(function() { return env.currentRunner().results().totalCount > 0; }); runs(function() { expect(env.currentRunner().results().passedCount).toEqual(1); }); }); }); describe("afterEach", function() { it("should be passed async callback", function() { var completed = false; env.describe("afterEach", function() { env.afterEach(function(done) { process.nextTick(function() { done('Failed in afterEach'); completed = true; }); }); env.it("should pass", function() { this.expect(1+2).toEqual(3); }); }); env.currentRunner().execute(); waitsFor(function() { return completed === true; }); runs(function() { expect(env.currentRunner().results().passedCount).toEqual(1); expect(env.currentRunner().results().failedCount).toEqual(1); }); }); }); }); function firstResult(runner) { return runner.results().getItems()[0].getItems()[0].getItems()[0]; }