Standardize on Jasmine for tests.

This commit is contained in:
Timothy Farrell 2017-01-24 20:13:11 -06:00
parent e9e9da0d32
commit fc492d39f7
5 changed files with 122 additions and 92 deletions

View File

@ -16,7 +16,7 @@
"npm run build:umd:min && gzip -c9 dist/worker-portal.min.js > dist/worker-portal.min.js.gz", "npm run build:umd:min && gzip -c9 dist/worker-portal.min.js > dist/worker-portal.min.js.gz",
"build": "npm run build:umd:gzip && ls -l dist/", "build": "npm run build:umd:gzip && ls -l dist/",
"prepublish": "npm run clean && npm run build", "prepublish": "npm run clean && npm run build",
"test": "npm run build:lib && ava --verbose" "test": "npm run build:lib && jasmine --verbose"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -30,7 +30,6 @@
}, },
"homepage": "https://gitlab.com/explorigin/worker-portal", "homepage": "https://gitlab.com/explorigin/worker-portal",
"devDependencies": { "devDependencies": {
"ava": "^0.17.0",
"babel-cli": "6.18.0", "babel-cli": "6.18.0",
"babel-core": "6.21.0", "babel-core": "6.21.0",
"babel-eslint": "7.1.1", "babel-eslint": "7.1.1",
@ -38,9 +37,13 @@
"babel-preset-es2015-rollup": "3.0.0", "babel-preset-es2015-rollup": "3.0.0",
"babel-preset-stage-0": "6.16.0", "babel-preset-stage-0": "6.16.0",
"eslint": "3.12.2", "eslint": "3.12.2",
"jasmine": "^2.5.3",
"rimraf": "2.5.4", "rimraf": "2.5.4",
"rollup-plugin-babel": "^2.7.1", "rollup-plugin-babel": "^2.7.1",
"rollup-plugin-json": "2.1.0", "rollup-plugin-json": "2.1.0",
"uglifyjs": "2.4.10" "uglifyjs": "2.4.10"
},
"dependencies": {
"trimkit": "^1.0.2"
} }
} }

View File

@ -0,0 +1,109 @@
const { WorkerPortal } = require('../lib/index.js');
function FakeWorkerPair() {
let cbA = null;
let cbB = null;
const objA = {
postMessage: data => {
cbB({ data: data });
},
addEventListener: (eventName, fn) => {
cbA = (...r) => {
fn(...r);
};
},
removeEventListener: (eventName, fn) => {
cbA = null;
}
};
const objB = {
postMessage: data => {
cbA({ data: data });
},
addEventListener: (eventName, fn) => {
cbB = (...r) => {
fn(...r);
};
},
removeEventListener: (eventName, fn) => {
cbB = null;
}
};
return [objA, objB];
}
describe('Workers ', () => {
it('can call and respond equally', done => {
const [a, b] = FakeWorkerPair();
let masterApi, slaveApi;
return Promise.all([
WorkerPortal(
{
slaveAdd: (a, b) => a + b,
math: {
multiply: (a, b) => a * b,
lib: {
pow: (a, b) => Math.pow(a, b)
}
}
},
a,
true
),
WorkerPortal(
{
masterSubtract: (a, b) => a - b
},
b,
false
)
])
.then(([slave, master]) => {
masterApi = master;
slaveApi = slave;
expect(Object.keys(masterApi)).toEqual([
'__init',
'__cleanupSlave',
'slaveAdd',
'math',
'_cleanup'
]);
expect(Object.keys(masterApi.math)).toEqual(['multiply', 'lib']);
expect(Object.keys(slaveApi)).toEqual(['masterSubtract']);
return Promise.all([
slaveApi.masterSubtract(9, 2),
masterApi.slaveAdd(9, 2),
masterApi.math.multiply(9, 2),
masterApi.math.lib.pow(9, 2)
]);
})
.then(results => {
expect(results).toEqual([7, 11, 18, 81]);
return Promise.all([masterApi.slaveAdd(5, 2), slaveApi.masterSubtract(2, 2)]);
})
.then(results => {
expect(results).toEqual([7, 0]);
return masterApi._cleanup();
})
.catch(e => {
fail(e);
})
.then(() => {
return masterApi.slaveAdd(9, 2);
})
.then(e => {
fail('Expected rejection');
})
.catch(e => {
expect(e.message).toBe('Portal disabled');
done();
});
});
});

View File

@ -0,0 +1,7 @@
{
"spec_dir": "spec",
"spec_files": ["**/*[sS]pec.js"],
"helpers": ["helpers/**/*.js"],
"stopSpecOnExpectationFailure": false,
"random": false
}

View File

@ -1,89 +0,0 @@
import test from 'ava';
import { WorkerPortal } from './lib';
function FakeWorkerPair() {
let cbA = null;
let cbB = null;
const objA = {
postMessage: data => {
cbB({ data: data });
},
addEventListener: (eventName, fn) => {
cbA = (...r) => {
fn(...r);
};
},
removeEventListener: (eventName, fn) => {
cbA = null;
}
};
const objB = {
postMessage: data => {
cbA({ data: data });
},
addEventListener: (eventName, fn) => {
cbB = (...r) => {
fn(...r);
};
},
removeEventListener: (eventName, fn) => {
cbB = null;
}
};
return [objA, objB];
}
test('Workers can call and respond equally', async t => {
const [a, b] = FakeWorkerPair();
const slave = WorkerPortal(
{
slaveAdd: (a, b) => a + b,
math: {
multiply: (a, b) => a * b,
lib: {
pow: (a, b) => Math.pow(a, b)
}
}
},
a,
true
);
const master = WorkerPortal(
{
masterSubtract: (a, b) => a - b
},
b,
false
);
const masterApi = await master;
const slaveApi = await slave;
t.deepEqual(Object.keys(masterApi), ['__init', '__cleanupSlave', 'slaveAdd', 'math', '_cleanup']);
t.deepEqual(Object.keys(masterApi.math), ['multiply', 'lib']);
t.deepEqual(Object.keys(slaveApi), ['masterSubtract']);
t.is(await slaveApi.masterSubtract(9, 2), 7);
t.is(await masterApi.slaveAdd(9, 2), 11);
t.is(await masterApi.math.multiply(9, 2), 18);
t.is(await masterApi.math.lib.pow(9, 2), 81);
t.is(await masterApi.slaveAdd(5, 2), 7);
t.is(await slaveApi.masterSubtract(2, 2), 0);
await masterApi._cleanup();
return masterApi
.slaveAdd(9, 2)
.then(e => {
t.fail('Expected rejection');
})
.catch(e => {
t.is(e.message, 'Portal disabled');
});
});

View File

@ -36,13 +36,13 @@
"babel-preset-es2015-rollup": "3.0.0", "babel-preset-es2015-rollup": "3.0.0",
"babel-preset-stage-0": "6.16.0", "babel-preset-stage-0": "6.16.0",
"eslint": "3.2.0", "eslint": "3.2.0",
"jasmine": "^2.5.3",
"rimraf": "2.5.4", "rimraf": "2.5.4",
"rollup-plugin-json": "2.1.0", "rollup-plugin-json": "2.1.0",
"rollup-plugin-babel": "^2.7.1", "rollup-plugin-babel": "^2.7.1",
"uglifyjs": "2.4.10" "uglifyjs": "2.4.10"
}, },
"dependencies": { "dependencies": {
"jasmine": "^2.5.3",
"trimkit": "^1.0.2" "trimkit": "^1.0.2"
} }
} }