blob: 79bd7547a3d2a20edebdc5429f798f49b485786b [file] [log] [blame]
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];
}