file-test.js
4.43 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
* file-test.js: Tests for instances of the File transport
*
* (C) 2010 Charlie Robbins
* MIT LICENSE
*
*/
var path = require('path'),
vows = require('vows'),
fs = require('fs'),
assert = require('assert'),
winston = require('../../lib/winston'),
stdMocks = require('std-mocks'),
helpers = require('../helpers');
var transport = require('./transport');
var stream = fs.createWriteStream(
path.join(__dirname, '..', 'fixtures', 'logs', 'testfile.log')
),
fileTransport = new (winston.transports.File)({
filename: path.join(__dirname, '..', 'fixtures', 'logs', 'testfilename.log')
}),
failedFileTransport = new (winston.transports.File)({
filename: path.join(__dirname, '..', 'fixtures', 'logs', 'dir404', 'testfile.log')
}),
streamTransport = new (winston.transports.File)({ stream: stream });
vows.describe('winston/transports/file').addBatch({
"An instance of the File Transport": {
"when passed a valid filename": {
"should have the proper methods defined": function () {
helpers.assertFile(fileTransport);
},
"the log() method": helpers.testNpmLevels(fileTransport, "should respond with true", function (ign, err, logged) {
assert.isNull(err);
assert.isTrue(logged);
})
},
"when passed an invalid filename": {
"should have proper methods defined": function () {
helpers.assertFile(failedFileTransport);
},
"should enter noop failed state": function () {
helpers.assertFailedTransport(failedFileTransport);
}
},
"when passed a valid file stream": {
"should have the proper methods defined": function () {
helpers.assertFile(streamTransport);
},
"the log() method": helpers.testNpmLevels(streamTransport, "should respond with true", function (ign, err, logged) {
assert.isNull(err);
assert.isTrue(logged);
})
},
"streaming to stdout": {
topic: function () {
var transport = new (winston.transports.File)({
stream: process.stdout, timestamp: false, json: false
});
stdMocks.use();
return transport;
},
"with showLevel off": {
topic: function (stdoutStreamTransport) {
stdoutStreamTransport.showLevel = false;
stdoutStreamTransport.log('info', '', undefined, this.callback);
},
"should not have level prepended": function () {
var output = stdMocks.flush(),
line = output.stdout[0];
assert.equal(line, '\n');
}
},
// there would be a "with showLevel on" here but I think it's a bug in
// this version of vows. ugprading causes even more problems
teardown: function() {
stdMocks.restore();
}
}
}
}).addBatch({
"These tests have a non-deterministic end": {
topic: function () {
setTimeout(this.callback, 200);
},
"and this should be fixed before releasing": function () {
assert.isTrue(true);
}
}
}).addBatch({
"Error object in metadata #610": {
topic: function () {
var myErr = new Error("foo");
fileTransport.log('info', 'test message', myErr, this.callback.bind(this, null, myErr));
},
"should not be modified": function (err, myErr) {
assert.equal(myErr.message, "foo");
// Not sure if this is the best possible way to check if additional props appeared
assert.deepEqual(Object.getOwnPropertyNames(myErr), Object.getOwnPropertyNames(new Error("foo")));
}
}
}).addBatch({
"Date object in metadata": {
topic: function () {
var obj = new Date(1000);
fileTransport.log('info', 'test message', obj, this.callback.bind(this, null, obj));
},
"should not be modified": function (err, obj) {
// Not sure if this is the best possible way to check if additional props appeared
assert.deepEqual(Object.getOwnPropertyNames(obj), Object.getOwnPropertyNames(new Date()));
}
}
}).addBatch({
"Plain object in metadata": {
topic: function () {
var obj = { message: "foo" };
fileTransport.log('info', 'test message', obj, this.callback.bind(this, null, obj));
},
"should not be modified": function (err, obj) {
assert.deepEqual(obj, { message: "foo" });
}
}
}).addBatch({
"An instance of the File Transport": transport(winston.transports.File, {
filename: path.join(__dirname, '..', 'fixtures', 'logs', 'testfile.log')
})
}).export(module);