fs-ndjson
Version:
read and write NDJSON files (Newline Delimited JSON)
133 lines (118 loc) • 3.35 kB
JavaScript
;
const path = require('path');
const assert = require('assert');
const fsNdjson = require('../index.js');
const diff = require('deep-diff');
const outData = [
{
id: 'abc',
isNum: true,
val: 123
},
{
id: 'xyz',
isNum: false,
val: null
}
];
describe('fsNdjson', () => {
it('readFile returns promise', () => {
return fsNdjson.readFile(path.resolve(__dirname, 'input.ndjson')).then(collection => {
assert(collection.length === 4);
assert(collection[0].name === 'kyle');
});
});
it('readFile uses callback', () => {
return fsNdjson.readFile(
path.resolve(__dirname, 'input.ndjson'),
(error, collection) => {
assert(collection.length === 4);
assert(collection[1].hero === 'toolshed');
}
);
});
it('readFileSync', () => {
let collection = fsNdjson.readFileSync(path.resolve(__dirname, 'input.ndjson'));
assert(collection.length === 4);
assert(collection[3].hero === 'the coon');
});
it('readFile promise catches errors', () => {
let empty = null;
return fsNdjson
.readFile(path.resolve(__dirname, 'missing_input.ndjson'))
.then(collection => {
empty = collection;
})
.catch(() => {
assert(empty === null);
});
});
it('readFile callback handles errors', () => {
return fsNdjson.readFile(path.resolve(__dirname, 'missing_input.ndjson'), error => {
assert(error !== null);
});
});
it('writeFile returns promise', () => {
const outFile = path.resolve(__dirname, 'output.writeFile.promise.ndjson');
return fsNdjson.writeFile(outFile, outData).then(() => {
return fsNdjson.readFile(outFile).then(collection => {
assert(!diff(outData, collection));
});
});
});
it('writeFile uses callback', () => {
const outFile = path.resolve(
__dirname,
'new-dir',
'output.writeFile.callback.ndjson'
);
return fsNdjson.writeFile(outFile, outData, error => {
assert(!error);
return fsNdjson.readFile(outFile, (error, collection) => {
assert(!diff(outData, collection));
});
});
});
it('writeFileSync', () => {
const outFile = path.resolve(__dirname, 'output.writeFileSync.ndjson');
fsNdjson.writeFileSync(outFile, outData);
let collection = fsNdjson.readFileSync(outFile);
assert(!diff(outData, collection));
});
it('writeFile promise catches errors', () => {
let empty = null;
return fsNdjson
.writeFile('foo\u0000bar')
.then(collection => {
empty = collection;
assert(false);
})
.catch(error => {
assert(error);
assert(empty === null);
});
});
it('writeFile promise [no file] catches errors', () => {
let empty = null;
return fsNdjson
.writeFile()
.then(collection => {
empty = collection;
assert(false);
})
.catch(error => {
assert(error);
assert(empty === null);
});
});
it('writeFile callback handles errors', () => {
return fsNdjson.writeFile('foo\u0000bar', undefined, error => {
assert(error);
});
});
it('writeFile callback [no file] handles errors', () => {
return fsNdjson.writeFile(undefined, undefined, error => {
assert(error);
});
});
});