Skip to content

Commit f297f95

Browse files
committed
update readme and package.json description
1 parent babd657 commit f297f95

2 files changed

Lines changed: 61 additions & 69 deletions

File tree

README.md

Lines changed: 60 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
[![devDependency Status](https://david-dm.org/pretenderjs/pretender/dev-status.svg)](https://david-dm.org/pretenderjs/pretender#info=devDependencies)
77
[![Code Climate](https://codeclimate.com/github/pretenderjs/pretender/badges/gpa.svg)](https://codeclimate.com/github/pretenderjs/pretender)
88

9-
Pretender is a mock server library in the style of Sinon (but built from microlibs. Because JavaScript)
10-
that comes with an express/sinatra style syntax for defining routes and their handlers.
9+
Pretender is a mock server library for XMLHttpRequest and Fetch, that comes
10+
with an express/sinatra style syntax for defining routes and their handlers.
1111

12-
Pretender will temporarily replace the native XMLHttpRequest object, intercept all requests, and direct them
13-
to little pretend service you've defined.
12+
Pretender will temporarily replace native XMLHttpRequest and Fetch , intercept
13+
all requests, and direct them to little pretend service you've defined.
1414

1515
**:warning: Pretender only works in the browser!**
1616

1717
```javascript
18-
var PHOTOS = {
18+
const PHOTOS = {
1919
"10": {
2020
id: 10,
2121
src: 'http://media.giphy.com/media/UdqUo8xvEcvgA/giphy.gif'
@@ -26,21 +26,20 @@ var PHOTOS = {
2626
}
2727
};
2828

29-
var server = new Pretender(function(){
30-
this.get('/photos', function(request){
31-
var all = JSON.stringify(Object.keys(PHOTOS).map(function(k){return PHOTOS[k]}))
29+
const server = new Pretender(function() {
30+
this.get('/photos', request => {
31+
let all = JSON.stringify(Object.keys(PHOTOS).map(k => PHOTOS[k]);
3232
return [200, {"Content-Type": "application/json"}, all]
3333
});
3434

35-
this.get('/photos/:id', function(request){
35+
this.get('/photos/:id', request => {
3636
return [200, {"Content-Type": "application/json"}, JSON.stringify(PHOTOS[request.params.id])]
3737
});
3838
});
3939

40-
$.get('/photos/12', {success: function(){ ... }})
40+
$.get('/photos/12', {success() => { ... }})
4141
```
4242
43-
4443
## The Server DSL
4544
The server DSL is inspired by express/sinatra. Pass a function to the Pretender constructor
4645
that will be invoked with the Pretender instance as its context. Available methods are
@@ -50,12 +49,9 @@ single argument (the XMLHttpRequest instance that triggered this request) and mu
5049
containing the HTTP status code, headers object, and body as a string.
5150
5251
```javascript
53-
var server = new Pretender(function(){
54-
this.put('/api/songs/99', function(request){
55-
return [404, {}, ""];
56-
});
52+
const server = new Pretender(function() {
53+
this.put('/api/songs/99', request => [404, {}, ""]);
5754
});
58-
5955
```
6056
6157
a Pretender constructor can take multiple maps:
@@ -64,18 +60,14 @@ a Pretender constructor can take multiple maps:
6460
import adminMaps from "testing/maps/admin";
6561
import photoMaps from "testing/maps/photos";
6662

67-
var server = new Pretender(photoMaps, adminMaps);
68-
63+
const server = new Pretender(photoMaps, adminMaps);
6964
```
7065
7166
The HTTP verb methods can also be called on an instance individually:
7267
7368
```javascript
74-
var server = new Pretender();
75-
server.put('/api/songs/99', function(request){
76-
return [404, {}, ""];
77-
});
78-
69+
const server = new Pretender();
70+
server.put('/api/songs/99', request => [404, {}, ""]);
7971
```
8072
8173
### Paths
@@ -85,10 +77,8 @@ these well be attached to the request object as a `params` property with keys ma
8577
the dynamic portion and values with the matching value from the path.
8678
8779
```javascript
88-
var server = new Pretender(function(){
89-
this.get('/api/songs/:song_id', function(request){
90-
request.params.song_id;
91-
});
80+
const server = new Pretender(function() {
81+
this.get('/api/songs/:song_id', request => request.params.song_id);
9282
});
9383

9484
$.get('/api/songs/871') // params.song_id will be '871'
@@ -100,15 +90,13 @@ If there were query parameters in the request, these well be attached to the req
10090
property.
10191
10292
```javascript
103-
var server = new Pretender(function(){
104-
this.get('/api/songs', function(request){
105-
request.queryParams.sortOrder;
106-
});
93+
const server = new Pretender(function() {
94+
this.get('/api/songs', request => request.queryParams.sortOrder);
10795
});
10896

10997
// typical jQuery-style uses you've probably seen.
11098
// queryParams.sortOrder will be 'asc' for both styles.
111-
$.get({url: '/api/songs', data: {sortOrder: 'asc'});
99+
$.get({url: '/api/songs', data: { sortOrder: 'asc' });
112100
$.get('/api/songs?sortOrder=asc');
113101

114102
```
@@ -119,8 +107,8 @@ You must return an array from this handler that includes the HTTP status code, a
119107
of response headers, and a string body.
120108
121109
```javascript
122-
var server = new Pretender(function(){
123-
this.get('/api/songs', function(request){
110+
const server = new Pretender(function() {
111+
this.get('/api/songs', request => {
124112
return [
125113
200,
126114
{'content-type': 'application/javascript'},
@@ -133,14 +121,15 @@ var server = new Pretender(function(){
133121
Or, optionally, return a Promise.
134122
135123
```javascript
136-
var server = new Pretender(function() {
137-
this.get('/api/songs', function(request) {
138-
return new Promise(function(resolve) {
139-
var response = [
124+
const server = new Pretender(function() {
125+
this.get('/api/songs', request => {
126+
return new Promise(resolve => {
127+
let response = [
140128
200,
141129
{'content-type': 'application/javascript'},
142130
'[{"id": 12}, {"id": 14}]'
143131
];
132+
144133
resolve(response);
145134
});
146135
});
@@ -152,15 +141,15 @@ You can specify paths that should be ignored by pretender and made as real XHR r
152141
Enable these by specifying pass-through routes with `pretender.passthrough`:
153142
154143
```javascript
155-
var server = new Pretender(function(){
144+
const server = new Pretender(function() {
156145
this.get('/photos/:id', this.passthrough);
157146
});
158147
```
159148
160149
In some case, you will need to force pretender to passthough, just start your server with the `forcePassthrough` option.
161150
162151
```javascript
163-
var server = new Pretender({ forcePassthrough: true })
152+
const server = new Pretender({ forcePassthrough: true })
164153
```
165154
166155
### Timing Parameter
@@ -170,31 +159,31 @@ synchronously, after a defined amount of time, or never (i.e., it needs to be ma
170159
171160
**Default**
172161
```javascript
173-
var server = new Pretender(function(){
162+
const server = new Pretender(function() {
174163
// songHandler will execute the frame after receiving a request (async)
175164
this.get('/api/songs', songHandler);
176165
});
177166
```
178167
179168
**Synchronous**
180169
```javascript
181-
var server = new Pretender(function(){
170+
const server = new Pretender(function() {
182171
// songHandler will execute immediately after receiving a request (sync)
183172
this.get('/api/songs', songHandler, false);
184173
});
185174
```
186175
187176
**Delay**
188177
```javascript
189-
var server = new Pretender(function(){
178+
const server = new Pretender(function() {
190179
// songHandler will execute two seconds after receiving a request (async)
191180
this.get('/api/songs', songHandler, 2000);
192181
});
193182
```
194183
195184
**Manual**
196185
```javascript
197-
var server = new Pretender(function(){
186+
const server = new Pretender(function() {
198187
// songHandler will only execute once you manually resolve the request
199188
this.get('/api/songs', songHandler, true);
200189
});
@@ -208,15 +197,15 @@ You may want the timing behavior of a response to change from request to request
208197
done by providing a function as the timing parameter.
209198
210199
```javascript
211-
var externalState = 'idle';
200+
const externalState = 'idle';
212201

213202
function throttler() {
214203
if (externalState === 'OH NO DDOS ATTACK') {
215204
return 15000;
216205
}
217206
}
218207

219-
var server = new Pretender(function(){
208+
const server = new Pretender(function() {
220209
// songHandler will only execute based on the result of throttler
221210
this.get('/api/songs', songHandler, throttler);
222211
});
@@ -234,13 +223,13 @@ You can call `map` multiple times on a Pretender instance. This is a great way t
234223
sets of routes between tests:
235224
236225
```javascript
237-
export function authenticationRoutes(){
238-
this.post('/authenticate', function(){ ... });
239-
this.post('/signout', function(){ ... });
226+
export function authenticationRoutes() {
227+
this.post('/authenticate',() => { ... });
228+
this.post('/signout', () => { ... });
240229
}
241230

242-
export function songsRoutes(){
243-
this.get('/api/songs', function(){ ... });
231+
export function songsRoutes() {
232+
this.get('/api/songs',() => { ... });
244233
}
245234
```
246235
@@ -263,8 +252,8 @@ the HTTP `verb`, `path`, and original `request`. By default this method does not
263252
override this method to supply your own behavior like logging or test framework integration:
264253
265254
```javascript
266-
var server = new Pretender(function(){
267-
this.put('/api/songs/:song_id', function(request){
255+
const server = new Pretender(function() {
256+
this.put('/api/songs/:song_id', request => {
268257
return [202, {"Content-Type": "application/json"}, "{}"]
269258
});
270259
});
@@ -282,7 +271,7 @@ object if your server receives a request for a route that doesn't have a handler
282271
will throw an error. You can override this method to supply your own behavior:
283272
284273
```javascript
285-
var server = new Pretender(function(){
274+
const server = new Pretender(function() {
286275
// no routes
287276
});
288277

@@ -297,7 +286,7 @@ $.getJSON("/these/arent/the/droids");
297286
Requests set to be handled by pass-through will trigger the `passthroughRequest` hook:
298287
299288
```javascript
300-
var server = new Pretender(function(){
289+
const server = new Pretender(function() {
301290
this.get('/some/path', this.passthrough);
302291
});
303292

@@ -315,8 +304,8 @@ By default, this will augment the error message with some information about whic
315304
the error and then throw the error again. You can override this method to supply your own behavior:
316305
317306
```javascript
318-
var server = new Pretender(function(){
319-
this.get('/api/songs', function(request){
307+
const server = new Pretender(function() {
308+
this.get('/api/songs', request => {
320309
undefinedWAT("this is no function!");
321310
});
322311
});
@@ -332,7 +321,7 @@ Pretender is response format neutral, so you normally need to supply a string bo
332321
third part of a response:
333322
334323
```javascript
335-
this.get('/api/songs', function(request){
324+
this.get('/api/songs', request => {
336325
return [200, {}, "{'id': 12}"];
337326
});
338327
```
@@ -343,8 +332,8 @@ going to be JSON. The body of a response will be passed through a
343332
`prepareBody` defaults to an empty function, but can be overridden:
344333
345334
```javascript
346-
var server = new Pretender(function(){
347-
this.get('/api/songs', function(request){
335+
const server = new Pretender(function() {
336+
this.get('/api/songs', request => {
348337
return [200, {}, {id: 12}];
349338
});
350339
});
@@ -359,8 +348,8 @@ Response headers can be mutated for the entire service instance by implementing
359348
`prepareHeaders` method:
360349
361350
```javascript
362-
var server = new Pretender(function(){
363-
this.get('/api/songs', function(request){
351+
const server = new Pretender(function() {
352+
this.get('/api/songs', request => {
364353
return [200, {}, '{"id": 12}'];
365354
});
366355
});
@@ -379,29 +368,29 @@ any verb function. This is useful if you want to build testing infrastructure on
379368
pretender and need to fail tests that have handlers without requests.
380369
You can disable tracking requests by passing `trackRequests: false` to pretender options.
381370
```javascript
382-
var server = new Pretender({ trackRequests: false });
371+
const server = new Pretender({ trackRequests: false });
383372
```
384373
385374
Each handler keeps a count of the number of requests is successfully served.
386375
387376
```javascript
388377
server.get(/* ... */);
389-
var handler = server.handlers[0];
378+
const handler = server.handlers[0];
390379

391380
// or
392381

393-
var handler = server.get(/* ... */);
382+
const handler = server.get(/* ... */);
394383

395384
// then
396385

397-
var numberOfCalls = handler.numberOfCalls;
386+
const numberOfCalls = handler.numberOfCalls;
398387
```
399388
400389
## Clean up
401390
When you're done mocking, be sure to call `shutdown()` to restore the native XMLHttpRequest object:
402391
403392
```javascript
404-
var server = new Pretender(function(){
393+
const server = new Pretender(function() {
405394
... routing ...
406395
});
407396

@@ -419,4 +408,7 @@ server.shutdown(); // all done.
419408
420409
In order to have a more open and welcoming community this project adheres to a [code of conduct](CONDUCT.md) adapted from the [contributor covenant](http://contributor-covenant.org/).
421410
422-
Please adhere to this code of conduct in any interactions you have with this project's community. If you encounter someone violating these terms, please let a maintainer (@trek) know and we will address it as soon as possible.
411+
Please adhere to this code of conduct in any interactions you have with this
412+
project's community. If you encounter someone violating these terms, please let
413+
a maintainer (@trek) know and we will address it as soon as possible.
414+

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "pretender",
33
"version": "2.1.0",
44
"main": "./pretender.js",
5-
"description": "Pretender is a mock server library, that comes with an express/sinatra style syntax for defining routes and their handlers.",
5+
"description": "Pretender is a mock server library for XMLHttpRequest and Fetch, that comes with an express/sinatra style syntax for defining routes and their handlers.",
66
"license": "MIT",
77
"engines": {
88
"node": ">=4"

0 commit comments

Comments
 (0)