web-atoms-unit
v1.0.23
Published
Simple unit testing for web atoms on browser
Downloads
32
Readme
Web Atoms Unit Testing
Simple Unit testing framework for web atoms.
Dependencies
typescript
Please make sure, decorator support is enabled for your tests.
Installation
npm install web-atoms-unit
Running with Node
Create a run-tests.js
file
var fs = require("fs");
var vm = require("vm");
function loadScript(file){
var s = fs.readFileSync(file,'utf-8');
var script = new vm.Script(s, { filename: file });
script.runInThisContext();
}
// load web atoms mock
loadScript("./node_modules/web-atoms-unit/web-atoms-mock.js");
// load web atoms mvvm
loadScript("./node_modules/web-atoms-mvvm/dist/web-atoms-mvvm.js");
// load web atoms unit
loadScript("./node_modules/web-atoms-unit/index.js");
// load your tests..
// ideally all typescript files should be transpiled into
// one js file
loadScript("./tests/generated-test.js");
// .. so on.. you can write a script to load many files....
var p = WebAtoms.Unit.TestRunner.instance.run(process.argv[2]);
p.then(function(){
process.exit();
});
p.catch(function(error){
console.error(error);
process.abort();
});
// run all tests
node run-tests.js
// run tests by filtering categories provided by comma separated categories
node run-tests.js categories,categories
// run tests by filtering categories provided by regular expressions
node run-tests.js /regex/i
Running with browser
<html>
<head>
<script src="//cdn.jsdelivr.net/npm/[email protected]/index.js"></script>
</head>
<body>
<script>
// make sure all other scripts are loaded on the page
// before calling this one...
setTimeout(function(){
WebAtoms.Unit.TestRunner.instance.run();
},100);
</script>
</body>
</html>
Sample Test class
/// <reference path="./node_modules/web-atoms-unit/index.d.ts">
var Category = WebAtoms.Unit.Category;
var Test = WebAtoms.Unit.Test;
var Assert = WebAtoms.Unit.Assert;
var TestItem = WebAtoms.Unit.TestItem;
@Category("Math-Test")
class SampleTest extends TestItem{
@Test("Add")
add():void{
Assert.equals(4, 2 + 2);
Assert.doesNotEqual(5, 2 + 2);
}
divide(a:number,b:number):number{
if(b==0){
throw new Error("Division by zero");
}
return a/b;
}
@Test("Divide by zero")
divideByZero():void{
Assert.throws('Division by zero', ()=>{
this.divide(1,0);
});
}
// async...
@Test("Async test")
async asyncTest():Promise<any>{
// this.delay(100) is inbuilt
// function, you can use any
// promise to await
await this.delay(100);
Assert.equals(2,2);
}
@Test("Async throws")
async asyncThrows():Promise<any>{
// catches exception on
// asynchronous result
await Assert.throwsAsync('Division by zero',
async ():Promise<any> =>{
await this.delay(100);
this.divide(1,0);
}
);
}
}