Skip to content

Commit

Permalink
Add release documentation for v9.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
mantoni committed Oct 6, 2020
1 parent 077616c commit 3792ca0
Show file tree
Hide file tree
Showing 44 changed files with 3,645 additions and 5 deletions.
2 changes: 1 addition & 1 deletion docs/_releases/latest.md
Expand Up @@ -2,7 +2,7 @@
layout: page
title: API documentation - Sinon.JS
skip_ad: true
release_id: v9.1.0
release_id: v9.2.0
---

# {{page.title}} - `{{page.release_id}}`
Expand Down
8 changes: 4 additions & 4 deletions docs/_releases/latest/sandbox.md
Expand Up @@ -108,12 +108,12 @@ var sandbox = sinon.createSandbox({
});
```

##### injectInto
##### `injectInto`

The sandbox's methods can be injected into another object for convenience. The
`injectInto` configuration option can name an object to add properties to.

##### properties
##### `properties`

What properties to inject. Note that only naming "server" here is not
sufficient to have a `server` property show up in the target object, you also
Expand All @@ -132,13 +132,13 @@ returned by the function `inject`, namely:
}
```

##### useFakeTimers
##### `useFakeTimers`

If set to `true`, the sandbox will have a `clock` property. You can optionally pass
in a configuration object that follows the [specification for fake timers](../fake-timers),
such as `{ toFake: ["setTimeout", "setInterval"] }`.

##### useFakeServer
##### `useFakeServer`

If `true`, `server` and `requests` properties are added to the sandbox. Can
also be an object to use for fake server. The default one is `sinon.fakeServer`,
Expand Down
52 changes: 52 additions & 0 deletions docs/_releases/v9.2.0.md
@@ -0,0 +1,52 @@
---
layout: page
title: API documentation - Sinon.JS
skip_ad: true
release_id: v9.2.0
---

# {{page.title}} - `{{page.release_id}}`

This page contains the entire Sinon.JS API documentation along with brief introductions to the concepts Sinon implements.

* [General setup](./general-setup)
* [Fakes](./fakes)
* [Spies](./spies)
* [Stubs](./stubs)
* [Mocks](./mocks)
* [Spy calls](./spy-call)
* [Fake timers](./fake-timers)
* [Fake <code>XHR</code> and server](./fake-xhr-and-server)
* [JSON-P](./json-p)
* [Assertions](./assertions)
* [Matchers](./matchers)
* [Sandboxes](./sandbox)
* [Utils](./utils)

{% include docs/migration-guides.md %}

### Compatibility

### ES5.1

Sinon `{{page.release_id}}` is written as [ES5.1][ES5] and requires no transpiler or polyfills to run in the runtimes listed below.

### Supported runtimes

`{{page.release_id}}` has been verified in these runtimes:

* Firefox 45
* Chrome 48
* Internet Explorer 11
* Edge 14
* Safari 9
* [Node.js LTS versions](https://github.com/nodejs/Release)

There should not be any issues with using Sinon `{{page.release_id}}` in newer versions of the same runtimes.

If you need to support very old runtimes that have incomplete support for [ES5.1][ES5] you might get away with using loading [`es5-shim`][es5-shim] in your test environment.

{% include docs/contribute.md %}

[ES5]: http://www.ecma-international.org/ecma-262/5.1/
[es5-shim]: https://github.com/es-shims/es5-shim
209 changes: 209 additions & 0 deletions docs/_releases/v9.2.0/assertions.md
@@ -0,0 +1,209 @@
---
layout: page
title: Assertions - Sinon.JS
breadcrumb: assertions
---

Sinon.JS ships with a set of assertions that mirror most behavior verification methods and properties on spies and stubs. The advantage of using the assertions is that failed expectations on stubs and spies can be expressed directly as assertion failures with detailed and helpful error messages.

To make sure assertions integrate nicely with your test framework, you should customize either `sinon.assert.fail` or `sinon.assert.failException` and look into `sinon.assert.expose` and `sinon.assert.pass`.

The assertions can be used with either spies or stubs.

```javascript
"test should call subscribers with message as first argument" : function () {
var message = "an example message";
var spy = sinon.spy();

PubSub.subscribe(message, spy);
PubSub.publishSync(message, "some payload");

sinon.assert.calledOnce(spy);
sinon.assert.calledWith(spy, message);
}
```

## Assertions API

#### `sinon.assert.fail(message)`

Every assertion fails by calling this method.

By default it throws an error of type `sinon.assert.failException`.

If the test framework looks for assertion errors by checking for a specific exception, you can override the kind of exception thrown. If that does not fit with your testing framework of choice, override the `fail` method to do the right thing.


#### `sinon.assert.failException;`

Defaults to `AssertError`.


#### `sinon.assert.pass(assertion);`

Called every time `assertion` passes.

Default implementation does nothing.


#### `sinon.assert.notCalled(spy);`

Passes if `spy` was never called

#### `sinon.assert.called(spy);`

Passes if `spy` was called at least once.


#### `sinon.assert.calledOnce(spy);`

Passes if `spy` was called once and only once.


#### `sinon.assert.calledTwice(spy);`

Passes if `spy` was called exactly twice.


#### `sinon.assert.calledThrice(spy)`

Passes if `spy` was called exactly three times.


#### `sinon.assert.callCount(spy, num)`
Passes if `spy` was called exactly `num` times.


#### `sinon.assert.callOrder(spy1, spy2, ...)`
Passes if provided spies were called in the specified order.


#### `sinon.assert.calledOn(spyOrSpyCall, obj)`

Passes if `spy` was ever called with `obj` as its `this` value.

It's possible to assert on a dedicated spy call: `sinon.assert.calledOn(spy.firstCall, arg1, arg2, ...);`.


#### `sinon.assert.alwaysCalledOn(spy, obj)`

Passes if `spy` was always called with `obj` as its `this` value.


#### `sinon.assert.calledWith(spyOrSpyCall, arg1, arg2, ...);`

Passes if `spy` was called with the provided arguments.

It's possible to assert on a dedicated spy call: `sinon.assert.calledWith(spy.firstCall, arg1, arg2, ...);`.


#### `sinon.assert.alwaysCalledWith(spy, arg1, arg2, ...);`

Passes if `spy` was always called with the provided arguments.


#### `sinon.assert.neverCalledWith(spy, arg1, arg2, ...);`

Passes if `spy` was never called with the provided arguments.


#### `sinon.assert.calledWithExactly(spyOrSpyCall, arg1, arg2, ...);`

Passes if `spy` was called with the provided arguments and no others.

It's possible to assert on a dedicated spy call: `sinon.assert.calledWithExactly(spy.getCall(1), arg1, arg2, ...);`.


#### `sinon.assert.calledOnceWithExactly(spyOrSpyCall, arg1, arg2, ...);`

Passes if `spy` was called once and only once with the provided arguments and no others.

It's possible to assert on a dedicated spy call: `sinon.assert.calledOnceWithExactly(spy.getCall(1), arg1, arg2, ...);`.


#### `sinon.assert.alwaysCalledWithExactly(spy, arg1, arg2, ...);`

Passes if `spy` was always called with the provided arguments and no others.


#### `sinon.assert.calledWithMatch(spyOrSpyCall, arg1, arg2, ...)`

Passes if `spy` was called with matching arguments.

This behaves the same way as `sinon.assert.calledWith(spy, sinon.match(arg1), sinon.match(arg2), ...)`.

It's possible to assert on a dedicated spy call: `sinon.assert.calledWithMatch(spy.secondCall, arg1, arg2, ...);`.


#### `sinon.assert.alwaysCalledWithMatch(spy, arg1, arg2, ...)`

Passes if `spy` was always called with matching arguments.

This behaves the same way as `sinon.assert.alwaysCalledWith(spy, sinon.match(arg1), sinon.match(arg2), ...)`.


#### `sinon.assert.calledWithNew(spyOrSpyCall)`

Passes if `spy` was called with the `new` operator.

It's possible to assert on a dedicated spy call: `sinon.assert.calledWithNew(spy.secondCall, arg1, arg2, ...);`.


#### `sinon.assert.neverCalledWithMatch(spy, arg1, arg2, ...)`

Passes if `spy` was never called with matching arguments.

This behaves the same way as `sinon.assert.neverCalledWith(spy, sinon.match(arg1), sinon.match(arg2), ...)`.


#### `sinon.assert.threw(spyOrSpyCall, exception);`

Passes if `spy` threw the given exception.

The exception can be a `String` denoting its type, or an actual object.

If only one argument is provided, the assertion passes if `spy` ever threw any exception.

It's possible to assert on a dedicated spy call: `sinon.assert.threw(spy.thirdCall, exception);`.


#### `sinon.assert.alwaysThrew(spy, exception);`

Like above, only required for all calls to the spy.

#### `sinon.assert.match(actual, expectation);`

Uses [`sinon.match`](../matchers) to test if the arguments can be considered a match.

```javascript
var sinon = require('sinon');

describe('example', function(){
it('should match on `x` property, and ignore `y` property', function() {
var expected = {x: 1},
actual = {x: 1, y: 2};

sinon.assert.match(actual, expected);
});
});
```

#### `sinon.assert.expose(object, options);`

Exposes assertions into another object, to better integrate with the test framework. For instance, JsTestDriver uses global assertions, and to make Sinon.JS assertions appear alongside them, you can do.

```javascript
sinon.assert.expose(this);
```

This will give you `assertCalled(spy)`,`assertCallOrder(spy1, spy2, ...)` and so on.

The method accepts an optional options object with two options.

<dl>
<dt>prefix</dt>
<dd>is a prefix to give assertions. By default it is "assert", so <code>sinon.assert.called</code> becomes <code>target.assertCalled</code>. By passing a blank string, the exposed method will be <code>target.called</code>.</dd>

<dt>includeFail</dt>
<dd><code>true</code> by default, copies over the <code>fail</code> and <code>failException</code> properties</dd>
</dl>
21 changes: 21 additions & 0 deletions docs/_releases/v9.2.0/examples/.eslintrc.yml
@@ -0,0 +1,21 @@
env:
es6: true

parserOptions:
ecmaVersion: 2017

extends:
- ../../../../test/.eslintrc.yml

plugins:
- local-rules

rules:
local-rules/no-underscore-dangle: off
no-underscore-dangle: off
no-console: off
no-empty-function: off
mocha/no-setup-in-describe: off
no-var: error
prefer-const: error
strict: off # cannot use strict mode in RunKit due to it using `with` tricks
1 change: 1 addition & 0 deletions docs/_releases/v9.2.0/examples/.gitignore
@@ -0,0 +1 @@
package-lock.json
22 changes: 22 additions & 0 deletions docs/_releases/v9.2.0/examples/package.json
@@ -0,0 +1,22 @@
{
"name": "examples",
"version": "1.0.0",
"description": "Simulate running the Sinon runnable examples in RunKit",
"scripts": {
"test": "./run-test.sh"
},
"license": "ISC",
"// dependencies": "We use 'latest' for the versions, as that is what RunKit will use",
"dependencies": {
"@fatso83/mini-mocha": "latest",
"@sinonjs/referee": "latest",
"bluebird": "latest",
"jquery": "latest",
"jsdom": "latest",
"pubsub-js": "latest",
"sinon": "latest"
},
"devDependencies": {
"eslint": "^6.8.0"
}
}
28 changes: 28 additions & 0 deletions docs/_releases/v9.2.0/examples/run-test.sh
@@ -0,0 +1,28 @@
#!/bin/bash

# Link 'sinon' to local development dir
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR/.."
npm link

# Install examples project and link to local sinon folder
cd "$SCRIPT_DIR"
npm install --ignore-scripts
npm link sinon

# Lint
$(npm bin)/eslint .

# Make sure all examples are still runnable
set -e
for f in *.test.js; do
node $f
done
set +e

# clean up to avoid circular links confusing watchers
npm unlink sinon
git checkout -- package.json
npm install --ignore-scripts
cd "$SCRIPT_DIR/.."
npm unlink
16 changes: 16 additions & 0 deletions docs/_releases/v9.2.0/examples/spies-1-pubsub.test.js
@@ -0,0 +1,16 @@
require("@fatso83/mini-mocha").install();
const sinon = require("sinon");
const PubSub = require("pubsub-js");
const referee = require("@sinonjs/referee");
const assertTrue = referee.assert;

describe("PubSub", function() {
it("should call subscribers on publish", function() {
const callback = sinon.spy();

PubSub.subscribe("message", callback);
PubSub.publishSync("message");

assertTrue(callback.called);
});
});

0 comments on commit 3792ca0

Please sign in to comment.