jasmineExample

HTML

<script src="http://jasmine.github.io/2.2/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/2.2/lib/jasmine-html.js"></script>
<link rel="stylesheet" href="http://jasmine.github.io/2.2/lib/jasmine.css">
<script src="http://jasmine.github.io/2.2/lib/boot.js"></script>
<script src="https://rawgit.com/mike-goodwin/owasp-threat-dragon/master/td/public/libs/nools/nools.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-mocks.js"></script>
<title>Jasmine Spec Runner v2.2.0</title>

JavaScript

var app = angular.module('app', []);
app.run(['$rootScope', function ($rootScope) {}]);

var app = angular.module('app', []);
app.run(['$rootScope', function ($rootScope) {}]);

//threat engine service definition

var serviceId = 'threatengine';
var flow;
angular.module('app').factory(serviceId, ['$q', threatengine]);

function threatengine($q) {

    var service = { generateForElement: generateForElement };
    var Threats = function () { this.collection = []; }
    var Element = function (element) { this.type = element.attributes.type; }

    if (flow == null) { flow = initialiseFlow(); }

    return service;

    function generateForElement(element) {
        var threats = new Threats();
        var el = new Element(element);
        return flow.getSession(threats, el).match().then(function () {
          console.log('match completed');
          return threats.collection;
        }, function (err) {
            // NOTE: process error of match() call
        });
    }

    function initialiseFlow() {
        return nools.flow('Element threat generation', function (flow) {

            flow.rule('Spoofing Threat Rule', [
                [Element, 'el', 'el.type == "tm.Process"'],
                [Threats, 'threats']
            ], function (facts) {
                console.log('rule 1 processed');
                facts.threats.collection.push('Spoofing');
            });

            flow.rule('Tampering Threat Rule', [
                [Element, 'el', 'el.type == "tm.Process"'],
                [Threats, 'threats']
            ], function (facts) {
                console.log('rule 2 processed');
                facts.threats.collection.push('Tampering');
            });
        });
    }
}

//test definition

describe('threatengine service', function () {

    var threatengine;
    var $rootScope;
    var $q;
    var $httpBackend;
    var $timeout;
    var deferred;

    beforeEach(function () {

        angular.mock.module('app')

       ...