bind.tap.js
1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
'use strict';
// stdlib
var tap = require('tap');
var test = tap.test;
var EventEmitter = require('events').EventEmitter;
// module under test
var context = require('../context.js');
// multiple contexts in use
var tracer = context.createNamespace('tracer');
function Trace(harvester) {
this.harvester = harvester;
}
Trace.prototype.runHandler = function (callback) {
var wrapped = tracer.bind(function () {
callback();
this.harvester.emit('finished', tracer.get('transaction'));
}.bind(this));
wrapped();
};
test("simple tracer built on contexts", function (t) {
t.plan(6);
var harvester = new EventEmitter();
var trace = new Trace(harvester);
harvester.on('finished', function (transaction) {
t.ok(transaction, "transaction should have been passed in");
t.equal(transaction.status, 'ok', "transaction should have finished OK");
t.equal(Object.keys(process.namespaces).length, 1, "Should only have one namespace.");
});
trace.runHandler(function inScope() {
t.ok(tracer.active, "tracer should have an active context");
tracer.set('transaction', {status : 'ok'});
t.ok(tracer.get('transaction'), "can retrieve newly-set value");
t.equal(tracer.get('transaction').status, 'ok', "value should be correct");
});
});