2009-06-28 20:25:26 +00:00
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en" >
< head >
< meta http-equiv = "content-type" content = "text/html; charset=utf-8" / >
< meta name = "generator" content = "JsDoc Toolkit" / >
< title > JsDoc Reference - jasmine.Spy< / title >
< style type = "text/css" >
/* default.css */
body
{
font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
width: 800px;
}
.header
{
clear: both;
background-color: #ccc;
padding: 8px;
}
h1
{
font-size: 150%;
font-weight: bold;
padding: 0;
margin: 1em 0 0 .3em;
}
hr
{
border: none 0;
border-top: 1px solid #7F8FB1;
height: 1px;
}
pre.code
{
display: block;
padding: 8px;
border: 1px dashed #ccc;
}
#index
{
margin-top: 24px;
float: left;
width: 160px;
position: absolute;
left: 8px;
background-color: #F3F3F3;
padding: 8px;
}
#content
{
margin-left: 190px;
width: 600px;
}
.classList
{
list-style-type: none;
padding: 0;
margin: 0 0 0 8px;
font-family: arial, sans-serif;
font-size: 1em;
overflow: auto;
}
.classList li
{
padding: 0;
margin: 0 0 8px 0;
}
.summaryTable { width: 100%; }
h1.classTitle
{
font-size:170%;
line-height:130%;
}
h2 { font-size: 110%; }
caption, div.sectionTitle
{
background-color: #7F8FB1;
color: #fff;
font-size:130%;
text-align: left;
padding: 2px 6px 2px 6px;
border: 1px #7F8FB1 solid;
}
div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }
.summaryTable td
{
vertical-align: top;
padding: 4px;
border-bottom: 1px #7F8FB1 solid;
border-right: 1px #7F8FB1 solid;
}
/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
border-left: 1px #7F8FB1 solid;
width: 140px;
text-align: right;
}
td.attributes, .fixedFont
{
line-height: 15px;
color: #002EBE;
font-family: "Courier New",Courier,monospace;
font-size: 13px;
}
.summaryTable td.nameDescription
{
text-align: left;
font-size: 13px;
line-height: 15px;
}
.summaryTable td.nameDescription, .description
{
line-height: 15px;
padding: 4px;
padding-left: 4px;
}
.summaryTable { margin-bottom: 8px; }
ul.inheritsList
{
list-style: square;
margin-left: 20px;
padding-left: 0;
}
.detailList {
margin-left: 20px;
line-height: 15px;
}
.detailList dt { margin-left: 20px; }
.detailList .heading
{
font-weight: bold;
padding-bottom: 6px;
margin-left: 0;
}
.light, td.attributes, .light a:link, .light a:visited
{
color: #777;
font-style: italic;
}
.fineprint
{
text-align: right;
font-size: 10px;
}
< / style >
< / head >
< body >
<!-- ============================== header ================================= -->
<!-- begin static/header.html -->
< div id = "header" >
< / div >
<!-- end static/header.html -->
<!-- ============================== classes index ============================ -->
< div id = "index" >
<!-- begin publish.classesIndex -->
< div align = "center" > < a href = "../index.html" > Class Index< / a >
| < a href = "../files.html" > File Index< / a > < / div >
< hr / >
< h2 > Classes< / h2 >
< ul class = "classList" >
< li > < i > < a href = "../symbols/_global_.html" > _global_< / a > < / i > < / li >
< li > < a href = "../symbols/jasmine.html" > jasmine< / a > < / li >
2009-08-28 05:15:50 +00:00
< li > < a href = "../symbols/jasmine.Block.html" > jasmine.Block< / a > < / li >
2009-06-28 20:25:26 +00:00
2009-07-10 04:53:28 +00:00
< li > < a href = "../symbols/jasmine.Env.html" > jasmine.Env< / a > < / li >
2009-08-28 05:15:50 +00:00
< li > < a href = "../symbols/jasmine.JsApiReporter.html" > jasmine.JsApiReporter< / a > < / li >
2009-07-10 04:53:28 +00:00
< li > < a href = "../symbols/jasmine.MultiReporter.html" > jasmine.MultiReporter< / a > < / li >
2009-06-28 20:25:26 +00:00
< li > < a href = "../symbols/jasmine.NestedResults.html" > jasmine.NestedResults< / a > < / li >
2009-07-10 04:53:28 +00:00
< li > < a href = "../symbols/jasmine.Reporter.html" > jasmine.Reporter< / a > < / li >
2009-06-28 20:25:26 +00:00
< li > < a href = "../symbols/jasmine.Runner.html" > jasmine.Runner< / a > < / li >
2009-07-10 04:53:28 +00:00
< li > < a href = "../symbols/jasmine.Spec.html" > jasmine.Spec< / a > < / li >
2009-06-28 20:25:26 +00:00
< li > < a href = "../symbols/jasmine.Spy.html" > jasmine.Spy< / a > < / li >
< li > < a href = "../symbols/jasmine.Suite.html" > jasmine.Suite< / a > < / li >
< li > < a href = "../symbols/jasmine.util.html" > jasmine.util< / a > < / li >
< / ul >
< hr / >
<!-- end publish.classesIndex -->
< / div >
< div id = "content" >
<!-- ============================== class title ============================ -->
< h1 class = "classTitle" >
Class jasmine.Spy
< / h1 >
<!-- ============================== class summary ========================== -->
< p class = "description" >
2009-10-21 16:28:34 +00:00
< br / > < i > Defined in: < / i > < a href = "../symbols/src/lib_jasmine-0.10.0.js.html" > jasmine-0.10.0.js< / a > .
2009-06-28 20:25:26 +00:00
< / p >
<!-- ============================== constructor summary ==================== -->
< table class = "summaryTable" cellspacing = "0" summary = "A summary of the constructor documented in the class jasmine.Spy." >
< caption > Class Summary< / caption >
< thead >
< tr >
< th scope = "col" > Constructor Attributes< / th >
< th scope = "col" > Constructor Name and Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" >
2009-08-28 05:15:50 +00:00
< b > < a href = "../symbols/jasmine.Spy.html" > jasmine.Spy< / a > < / b > (name)
2009-06-28 20:25:26 +00:00
< / div >
< div class = "description" > Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.< / div >
< / td >
< / tr >
< / tbody >
< / table >
<!-- ============================== properties summary ===================== -->
< table class = "summaryTable" cellspacing = "0" summary = "A summary of the fields documented in the class jasmine.Spy." >
< caption > Field Summary< / caption >
< thead >
< tr >
< th scope = "col" > Field Attributes< / th >
< th scope = "col" > Field Name and Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" >
< b > < a href = "../symbols/jasmine.Spy.html#argsForCall" > argsForCall< / a > < / b >
< / div >
< div class = "description" > Holds arguments for each call to the spy, indexed by call count< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" >
< b > < a href = "../symbols/jasmine.Spy.html#identity" > identity< / a > < / b >
< / div >
< div class = "description" > The name of the spy, if provided.< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" >
< b > < a href = "../symbols/jasmine.Spy.html#isSpy" > isSpy< / a > < / b >
< / div >
< div class = "description" > Is this Object a spy?< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" >
< b > < a href = "../symbols/jasmine.Spy.html#mostRecentCall" > mostRecentCall< / a > < / b >
< / div >
< div class = "description" > Tracking of the most recent call to the spy.< / div >
< / td >
< / tr >
< / tbody >
< / table >
<!-- ============================== methods summary ======================== -->
< table class = "summaryTable" cellspacing = "0" summary = "A summary of the methods documented in the class jasmine.Spy." >
< caption > Method Summary< / caption >
< thead >
< tr >
< th scope = "col" > Method Attributes< / th >
< th scope = "col" > Method Name and Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" > < b > < a href = "../symbols/jasmine.Spy.html#andCallFake" > andCallFake< / a > < / b > (fakeFunc)
< / div >
< div class = "description" > Calls an alternate implementation when a spy is called.< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" > < b > < a href = "../symbols/jasmine.Spy.html#andCallThrough" > andCallThrough< / a > < / b > ()
< / div >
< div class = "description" > Tells a spy to call through to the actual implemenatation.< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" > < b > < a href = "../symbols/jasmine.Spy.html#andReturn" > andReturn< / a > < / b > (value)
< / div >
< div class = "description" > For setting the return value of a spy.< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" > < b > < a href = "../symbols/jasmine.Spy.html#andThrow" > andThrow< / a > < / b > (exceptionMsg)
< / div >
< div class = "description" > For throwing an exception when a spy is called.< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" > < b > < a href = "../symbols/jasmine.Spy.html#plan" > plan< / a > < / b > ()
< / div >
< div class = "description" > The acutal function this spy stubs.< / div >
< / td >
< / tr >
< tr >
< td class = "attributes" > < / td >
< td class = "nameDescription" >
< div class = "fixedFont" > < b > < a href = "../symbols/jasmine.Spy.html#reset" > reset< / a > < / b > ()
< / div >
< div class = "description" > Resets all of a spy's the tracking variables so that it can be used again.< / div >
< / td >
< / tr >
< / tbody >
< / table >
<!-- ============================== events summary ======================== -->
<!-- ============================== constructor details ==================== -->
< div class = "details" > < a name = "constructor" > < / a >
< div class = "sectionTitle" >
Class Detail
< / div >
< div class = "fixedFont" >
< b > jasmine.Spy< / b > (name)
< / div >
< div class = "description" >
2009-10-21 16:33:31 +00:00
Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.
Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine
expectation syntax. Spies can be checked if they were called or not and what the calling params were.
A Spy has the following mehtod: wasCalled, callCount, mostRecentCall, and argsForCall (see docs)
Spies are torn down at the end of every spec.
Note: Do < b > not< / b > call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
2009-06-28 20:25:26 +00:00
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > // a stub
var myStub = jasmine.createSpy('myStub'); // can be used anywhere
// spy example
var foo = {
not: function(bool) { return !bool; }
}
// actual foo.not will not be called, execution stops
spyOn(foo, 'not');
// foo.not spied upon, execution will continue to implementation
spyOn(foo, 'not').andCallThrough();
// fake example
var foo = {
not: function(bool) { return !bool; }
}
// foo.not(val) will return val
spyOn(foo, 'not').andCallFake(function(value) {return value;});
// mock example
foo.not(7 == 7);
expect(foo.not).wasCalled();
expect(foo.not).wasCalledWith(true);< / pre >
2009-06-28 20:25:26 +00:00
< dl class = "detailList" >
< dt class = "heading" > Parameters:< / dt >
< dt >
< span class = "light fixedFont" > {String}< / span > < b > name< / b >
< / dt >
< dd > < / dd >
< / dl >
< dl class = "detailList" >
< dt class = "heading" > See:< / dt >
< dd > < a href = "../symbols/_global_.html#spyOn" > spyOn< / a > , jasmine.createSpy, jasmine.createSpyObj< / dd >
< / dl >
< / div >
<!-- ============================== field details ========================== -->
< div class = "sectionTitle" >
Field Detail
< / div >
< a name = "argsForCall" > < / a >
< div class = "fixedFont" >
< b > argsForCall< / b >
< / div >
< div class = "description" >
Holds arguments for each call to the spy, indexed by call count
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > var mySpy = jasmine.createSpy('foo');
mySpy(1, 2);
mySpy(7, 8);
mySpy.mostRecentCall.args = [7, 8];
mySpy.argsForCall[0] = [1, 2];
mySpy.argsForCall[1] = [7, 8];< / pre >
2009-06-28 20:25:26 +00:00
< hr / >
< a name = "identity" > < / a >
< div class = "fixedFont" >
< b > identity< / b >
< / div >
< div class = "description" >
The name of the spy, if provided.
< / div >
< hr / >
< a name = "isSpy" > < / a >
< div class = "fixedFont" >
< b > isSpy< / b >
< / div >
< div class = "description" >
Is this Object a spy?
< / div >
< hr / >
< a name = "mostRecentCall" > < / a >
< div class = "fixedFont" >
< b > mostRecentCall< / b >
< / div >
< div class = "description" >
Tracking of the most recent call to the spy.
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > var mySpy = jasmine.createSpy('foo');
mySpy(1, 2);
mySpy.mostRecentCall.args = [1, 2];< / pre >
2009-06-28 20:25:26 +00:00
<!-- ============================== method details ========================= -->
< div class = "sectionTitle" >
Method Detail
< / div >
< a name = "andCallFake" > < / a >
< div class = "fixedFont" >
< b > andCallFake< / b > (fakeFunc)
< / div >
< div class = "description" >
Calls an alternate implementation when a spy is called.
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > var baz = function() {
// do some stuff, return something
}
// defining a spy from scratch: foo() calls the function baz
var foo = jasmine.createSpy('spy on foo').andCall(baz);
// defining a spy on an existing property: foo.bar() calls an anonymnous function
spyOn(foo, 'bar').andCall(function() { return 'baz';} );< / pre >
2009-06-28 20:25:26 +00:00
< dl class = "detailList" >
< dt class = "heading" > Parameters:< / dt >
< dt >
< span class = "light fixedFont" > {Function}< / span > < b > fakeFunc< / b >
< / dt >
< dd > < / dd >
< / dl >
< hr / >
< a name = "andCallThrough" > < / a >
< div class = "fixedFont" >
< b > andCallThrough< / b > ()
< / div >
< div class = "description" >
Tells a spy to call through to the actual implemenatation.
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > var foo = {
bar: function() { // do some stuff }
}
// defining a spy on an existing property: foo.bar
spyOn(foo, 'bar').andCallThrough();< / pre >
2009-06-28 20:25:26 +00:00
< hr / >
< a name = "andReturn" > < / a >
< div class = "fixedFont" >
< b > andReturn< / b > (value)
< / div >
< div class = "description" >
For setting the return value of a spy.
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > // defining a spy from scratch: foo() returns 'baz'
var foo = jasmine.createSpy('spy on foo').andReturn('baz');
// defining a spy on an existing property: foo.bar() returns 'baz'
spyOn(foo, 'bar').andReturn('baz');< / pre >
2009-06-28 20:25:26 +00:00
< dl class = "detailList" >
< dt class = "heading" > Parameters:< / dt >
< dt >
< span class = "light fixedFont" > {Object}< / span > < b > value< / b >
< / dt >
< dd > < / dd >
< / dl >
< hr / >
< a name = "andThrow" > < / a >
< div class = "fixedFont" >
< b > andThrow< / b > (exceptionMsg)
< / div >
< div class = "description" >
For throwing an exception when a spy is called.
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > // defining a spy from scratch: foo() throws an exception w/ message 'ouch'
var foo = jasmine.createSpy('spy on foo').andThrow('baz');
// defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch'
spyOn(foo, 'bar').andThrow('baz');< / pre >
2009-06-28 20:25:26 +00:00
< dl class = "detailList" >
< dt class = "heading" > Parameters:< / dt >
< dt >
< span class = "light fixedFont" > {String}< / span > < b > exceptionMsg< / b >
< / dt >
< dd > < / dd >
< / dl >
< hr / >
< a name = "plan" > < / a >
< div class = "fixedFont" >
< b > plan< / b > ()
< / div >
< div class = "description" >
The acutal function this spy stubs.
< / div >
< hr / >
< a name = "reset" > < / a >
< div class = "fixedFont" >
< b > reset< / b > ()
< / div >
< div class = "description" >
Resets all of a spy's the tracking variables so that it can be used again.
< / div >
2009-10-21 16:33:31 +00:00
< pre class = "code" > spyOn(foo, 'bar');
foo.bar();
expect(foo.bar.callCount).toEqual(1);
foo.bar.reset();
expect(foo.bar.callCount).toEqual(0);< / pre >
2009-06-28 20:25:26 +00:00
<!-- ============================== event details ========================= -->
< hr / >
< / div >
<!-- ============================== footer ================================= -->
< div class = "fineprint" style = "clear:both" >
2009-10-21 16:33:31 +00:00
Documentation generated by < a href = "http://www.jsdoctoolkit.org/" target = "_blank" > JsDoc Toolkit< / a > 2.1.0 on Wed Oct 21 2009 09:32:58 GMT-0700 (PDT)
2009-06-28 20:25:26 +00:00
< / div >
< / body >
< / html >