UNPKG

disposable-cls

Version:

Provides disposable continuation local storage for Node.js.

74 lines (73 loc) 3.63 kB
"use strict"; 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); }); });