disposable-cls
Version:
Provides disposable continuation local storage for Node.js.
74 lines (73 loc) • 3.63 kB
JavaScript
;
var chai_1 = require("chai");
var index_1 = require("../src/index");
var MockObjects_1 = require("./MockObjects");
describe("Single scope block", function () {
it("should allow retrieval of a context item", function (done) {
var mockObject = new MockObjects_1.SimpleDisposableMockObject(null);
index_1.using([mockObject], function () {
var objectInContext = index_1.getCurrentObject(MockObjects_1.SimpleDisposableMockObject);
chai_1.expect(objectInContext).to.not.be.undefined;
chai_1.expect(objectInContext.id).to.be.equal(mockObject.id);
done();
});
});
it("should dispose of the context items", function () {
var wasDisposed = false;
var mockObject = new MockObjects_1.SimpleDisposableMockObject(function () { wasDisposed = true; });
index_1.using([mockObject], function () {
chai_1.expect(wasDisposed).to.be.false;
});
chai_1.expect(wasDisposed).to.be.false;
});
});
describe("Multiple scope block", function () {
it("should retrieve the closest context item", function (done) {
var mockObject1 = new MockObjects_1.SimpleDisposableMockObject(null);
var mockObject2 = new MockObjects_1.SimpleDisposableMockObject(null);
index_1.using([mockObject1], function () {
var objectInContext = index_1.getCurrentObject(MockObjects_1.SimpleDisposableMockObject);
chai_1.expect(objectInContext).to.not.be.undefined;
chai_1.expect(objectInContext.id).to.be.equal(mockObject1.id);
index_1.using([mockObject2], function () {
var objectInContext = index_1.getCurrentObject(MockObjects_1.SimpleDisposableMockObject);
chai_1.expect(objectInContext).to.not.be.undefined;
chai_1.expect(objectInContext.id).to.be.equal(mockObject2.id);
done();
});
});
});
it("should walk the stack to retrieve the closest context item", function (done) {
var mockObject = new MockObjects_1.SimpleDisposableMockObject(null);
index_1.using([mockObject], function () {
index_1.using([new MockObjects_1.SimpleMockObject()], function () {
var objectInContext = index_1.getCurrentObject(MockObjects_1.SimpleDisposableMockObject);
chai_1.expect(objectInContext).to.not.be.undefined;
chai_1.expect(objectInContext.id).to.be.equal(mockObject.id);
done();
});
});
});
it("should dispose of the context items only when all scope blocks go out of scope", function (done) {
var disposedCount = 0;
var doneFlag = false;
var expectationsOnCompleteFunc = function () {
if (doneFlag) {
chai_1.expect(disposedCount).to.be.equal(2);
return done();
}
setImmediate(expectationsOnCompleteFunc);
};
var disposeFunc = function () { disposedCount++; };
var mockObject1 = new MockObjects_1.SimpleDisposableMockObject(disposeFunc);
var mockObject2 = new MockObjects_1.SimpleDisposableMockObject(disposeFunc);
index_1.using([mockObject1], function () {
chai_1.expect(disposedCount).to.be.equal(0);
index_1.using([mockObject2], function () {
chai_1.expect(disposedCount).to.be.equal(0);
doneFlag = true;
});
});
setImmediate(expectationsOnCompleteFunc);
});
});