Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rjz/supertest-session
Persistent sessions for supertest
https://github.com/rjz/supertest-session
javascript supertest supertest-session
Last synced: 4 days ago
JSON representation
Persistent sessions for supertest
- Host: GitHub
- URL: https://github.com/rjz/supertest-session
- Owner: rjz
- License: other
- Created: 2013-11-02T20:24:50.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2023-08-01T20:35:22.000Z (over 1 year ago)
- Last Synced: 2024-05-20T08:03:55.530Z (7 months ago)
- Topics: javascript, supertest, supertest-session
- Language: JavaScript
- Homepage:
- Size: 442 KB
- Stars: 87
- Watchers: 7
- Forks: 21
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Supertest sessions
Session wrapper around supertest.
[![Coverage
Status](https://coveralls.io/repos/rjz/supertest-session/badge.png)](https://coveralls.io/r/rjz/supertest-session)References:
* https://gist.github.com/joaoneto/5152248
* https://github.com/visionmedia/supertest/issues/46
* https://github.com/visionmedia/supertest/issues/26## Installation
$ npm install --save-dev supertest supertest-session
## Test
$ npm test
## Usage
Require `supertest-session` and pass in the test application:
```js
var session = require('supertest-session');
var myApp = require('../../path/to/app');var testSession = null;
beforeEach(function () {
testSession = session(myApp);
});
```And set some expectations:
```js
it('should fail accessing a restricted page', function (done) {
testSession.get('/restricted')
.expect(401)
.end(done)
});it('should sign in', function (done) {
testSession.post('/signin')
.send({ username: 'foo', password: 'password' })
.expect(200)
.end(done);
});
```You can set preconditions:
```js
describe('after authenticating session', function () {var authenticatedSession;
beforeEach(function (done) {
testSession.post('/signin')
.send({ username: 'foo', password: 'password' })
.expect(200)
.end(function (err) {
if (err) return done(err);
authenticatedSession = testSession;
return done();
});
});it('should get a restricted page', function (done) {
authenticatedSession.get('/restricted')
.expect(200)
.end(done)
});});
```
### Accessing cookies
The cookies attached to the session may be retrieved from `session.cookies`:
```js
var sessionCookie = testSession.cookies.find(function (cookie) {
return cookie.name === connect.sid;
});
```If you're using
### Request hooks
By default, supertest-session authenticates using session cookies. If your app
uses a custom strategy to restore sessions, you can provide `before` and `after`
hooks to adjust the request and inspect the response:```js
var testSession = session(myApp, {
before: function (req) {
req.set('authorization', 'Basic aGVsbG86d29ybGQK');
}
});
```### Cookie Jar Access Options
By default supertest-session will derive the CookieAccessInfo config of the cookie jar from the
agent configuration. There might be cases where you want to override this, e.g. if you're testing
a service which is configured to run behind a proxy but which [sets secure
cookies](https://expressjs.com/en/api.html#req.secure). To have supertest-session expose these
secure cookies you can provide an override config to the internal call to
[CookieAccessInfo](https://github.com/bmeck/node-cookiejar#cookieaccessinfodomainpathsecurescript):```js
var cookieAccess = {
domain: 'example.com',
path: '/testpath',
secure: true,
script: true,
};
var testSession = session(myApp, { cookieAccess: cookieAccess });
```By default the underlying `supertest` agent will still determine the CookieAccessInfo from the URL.
If you want supertest-session to instead send cookies according to this `cookieAccess` config you
can make use of the `before` hook:```js
var cookieAccess = {
domain: 'example.com',
path: '/testpath',
secure: true,
script: true,
};
var testSession = session(myApp, {
cookieAccess: cookieAccess,
before: function (req) {
req.cookies = this.cookies.toValueString();
},
});
```## License
MIT