cheatsheets/sinon.md

131 lines
1.5 KiB
Markdown

---
title: Sinon
category: JavaScript libraries
layout: 2017/sheet
weight: -1
updated: 2017-10-27
---
### Creating spies
```js
fn = sinon.spy()
fn()
```
```js
fn.calledOnce == true
fn.callCount == 1
```
### Spying/stubbing
```js
sinon.spy($, 'ajax')
```
```js
$.ajax();
$.ajax.calledOnce == true
```
```js
sinon.stub($, 'ajax', function () { ... }) // function optional
```
```js
$.ajax.calledWithMatch({ url: '/x' })
$.ajax.restore()
```
### Spy/stub properties
```js
spy
.args //=> [ [..], [..] ] one per call
.thisValues
.returnValues
```
```js
.called //=> true
.notCalled
.callCount
.calledOnce
.calledTwice
.calledThrice
```
```js
.getCalls() //=> Array
.getCall(0)
.firstCall
```
### Anonymous stub
```js
stub = sinon.stub().returns(42)
stub() == 42
```
```js
stub
.withArgs(42).returns(1)
.withArgs(43).throws("TypeError")
```
```js
stub
.returns(1)
.throws("TypeError")
.returnsArg(0) // Return 1st argument
.callsArg(0)
```
### Fake date
```js
sinon.useFakeTimers(+new Date(2011,9,1));
```
### Fake server
```js
server = sinon.fakeServer.create()
```
```js
$.get('/file.json', ...)
server.requests[0].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({ hello: 'world' })
)
```
```js
server.restore()
```
### Fake XHR
```js
xhr = sinon.useFakeXMLHttpRequest()
xhr.restore()
```
### Sandbox
```js
beforeEach(function() {
global.sinon = require('sinon').sandbox.create()
})
```
```js
afterEach(function() {
global.sinon.restore()
})
```