Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ajb413/pubnub-functions-mock
Mocks PubNub Functions modules for event handler unit testing
https://github.com/ajb413/pubnub-functions-mock
chai javascript mocha nodejs pubnub pubnub-functions serverless unit-testing
Last synced: 2 months ago
JSON representation
Mocks PubNub Functions modules for event handler unit testing
- Host: GitHub
- URL: https://github.com/ajb413/pubnub-functions-mock
- Owner: ajb413
- Created: 2017-10-28T00:27:37.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-05-14T22:17:08.000Z (over 5 years ago)
- Last Synced: 2024-10-13T14:08:54.148Z (2 months ago)
- Topics: chai, javascript, mocha, nodejs, pubnub, pubnub-functions, serverless, unit-testing
- Language: JavaScript
- Homepage:
- Size: 48.8 KB
- Stars: 6
- Watchers: 3
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# PubNub Functions Mock
[![Build Status](https://travis-ci.org/ajb413/pubnub-functions-mock.svg?branch=master)](https://travis-ci.org/ajb413/pubnub-functions-mock)
[![Coverage Status](https://coveralls.io/repos/github/ajb413/pubnub-functions-mock/badge.svg?branch=master&c=b)](https://coveralls.io/github/ajb413/pubnub-functions-mock?branch=master&c=b)
[![Known Vulnerabilities](https://snyk.io/test/github/ajb413/pubnub-functions-mock/badge.svg)](https://snyk.io/test/github/ajb413/pubnub-functions-mock)Unit test PubNub Functions event handlers on your local machine
## Currently supported modules for mock ([docs here](https://www.pubnub.com/docs/blocks/xhr-module)):
- XHR (currently makes **real** requests using https://www.npmjs.com/package/node-fetch)
- KV Store
- codec/query_string
- codec/base64
- PubNub
- VaultAny module can be overridden using `overrideDefaultModules` within a single test body. The module or modules will only be overridden in that single test block.
```javascript
endpoint.overrideDefaultModules({
"xhr" : () => {
return Promise.resolve(200);
}
});
```To override a default module in all tests, pass the module object when the Event Handler is initialized.
```javascript
endpoint = Mock('./myEndpointEventHandler.js', {
"xhr" : () => {
return Promise.resolve(200);
}
});
```Mock the KVStore for a test
```javascript
endpoint.mockKVStoreData({"key":"value"});
```Mock the KVStore counters for a test
```javascript
endpoint.mockKVStoreCounters({"key":123});
```## Example PubNub Function Endpoint unit test with Mocha and Chai
```javascript
// myTest.js
const assert = require('chai').assert;
const Mock = require('pubnub-functions-mock');const endpointRequestObject = {
"body": "{}",
"message": {},
"method": null,
"params": {}
};const endpointResponseObject = {
"headers": {},
"status": 200,
"send": function ( body ) {
return new Promise( (resolve, reject) => {
resolve({
"body": body || "",
"status": this.status
});
});
}
};describe('#endpoint', () => {
let endpoint;beforeEach(() => {
endpoint = Mock('./myEndpointEventHandler.js');
});it('creates endpoint event handler of type Function', (done) => {
assert.isFunction(endpoint, 'was successfully created');
done();
});it('returns "Hello World!"', (done) => {
let request = Object.assign({}, endpointRequestObject);
let response = Object.assign({}, endpointResponseObject);let correctResult = {
"body": "Hello World!",
"status": 200
};endpoint(request, response).then((testResult) => {
assert.equal(testResult.status, correctResult.status, 'status');
assert.equal(testResult.body, correctResult.body, 'response body');done();
});
});it('returns a kvstore value', (done) => {
let request = Object.assign({}, endpointRequestObject);
let response = Object.assign({}, endpointResponseObject);request.getKvValue = true;
let preExistingValue = { "key" : "value" };
let correctResult = {
"body": preExistingValue.key,
"status": 200
};// Mock the pre-existing KVStore value for this test only
endpoint.mockKVStoreData(preExistingValue);endpoint(request, response).then((testResult) => {
assert.equal(testResult.status, correctResult.status, 'status');
assert.equal(testResult.body, correctResult.body, 'response body');done();
});
});
});
```The above test would be run on `myEndpointEventHandler.js` using
`mocha myTest````javascript
// myEndpointEventHandler.js
export default (request, response) => {
const pubnub = require('pubnub');
const kvstore = require('kvstore');if (request.getKvValue) {
return kvstore.get('key').then((value) => {
response.status = 200;
return response.send(value);
});
}response.status = 200;
return response.send("Hello World!");
};
```