<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Jasmine Spec Runner</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-1.3.0/jasmine_favicon.png" />
<!-- include source files here... -->
<link data-require="jasmine@*" data-semver="2.0.0" rel="stylesheet" href="//cdn.jsdelivr.net/jasmine/2.0.0rc2/jasmine.css" />
<script data-require="jasmine@*" data-semver="2.0.0" src="//cdn.jsdelivr.net/jasmine/2.0.0rc2/jasmine.js"></script>
<script data-require="jasmine@*" data-semver="2.0.0" src="//cdn.jsdelivr.net/jasmine/2.0.0rc2/jasmine-html.js"></script>
<script data-require="jasmine@*" data-semver="2.0.0" src="//cdn.jsdelivr.net/jasmine/2.0.0rc2/boot.js"></script>
<script data-require="json2@*" data-semver="0.0.2012100-8" src="//cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.js"></script>
<!-- include src files here... -->
<script type="text/javascript" src="Logger.js"></script>
<script type="text/javascript" src="Calculator.js"></script>
<!-- include spec files here... -->
<script type="text/javascript" src="Calculator.spec.js"></script>
</head>
<body></body>
</html>
function Calculator(logger) {
var add = function() {
var operands = Array.prototype.slice.call(arguments);
var sum = 0;
for(var i = 0; i < operands.length; i++) {
sum += operands[i];
}
logger.log(operands.join(' + ') + ' = ' + sum);
return sum;
}
return {
add: add
};
}
describe('Given the Calculator', function() {
var logger = Logger(),
calc = Calculator(logger),
sum;
beforeEach(function() {
spyOn(logger, "log");
//spyOn(logger, "log").and.callThrough();
//spyOn(logger, "log").and.callFake(function() {console.debug('Spy Called')});
});
afterEach(function() {
logger.log.calls.reset();
});
it('Then it contains an add method', function() {
expect(calc.add).toBeDefined();
});
describe('When I add two numbers', function() {
beforeEach(function() {
sum = calc.add(1, 2);
});
it('Then the I get the correct answer', function() {
expect(sum).toBe(3);
});
it('Then the logger should have been called once', function() {
expect(logger.log).toHaveBeenCalled();
expect(logger.log.calls.count()).toBe(1);
});
});
describe('When I add three numbers', function() {
beforeEach(function() {
sum = calc.add(1, 2, 7);
})
it('Then the I get the correct answer', function() {
expect(sum).toBe(10);
});
it('Then the logger should have been called once', function() {
expect(logger.log).toHaveBeenCalled();
expect(logger.log.calls.count()).toBe(1);
});
});
});
function Logger() {
var log = function(message) {
console.log(message);
}
return {
log: log
};
}