add jest mocks example for gpio+mqtt client
This commit is contained in:
parent
f2d3961686
commit
bcbf9e6f88
|
@ -12,7 +12,7 @@ Article: https://www.sitepoint.com/getting-started-with-the-raspberry-pi-gpio-pi
|
|||
docker run -it --rm -v $(pwd):/app -w /app node:lts bash
|
||||
~~~
|
||||
|
||||
followed by
|
||||
followed by
|
||||
|
||||
~~~shell
|
||||
npm install
|
||||
|
@ -21,10 +21,14 @@ npm run test
|
|||
|
||||
## Jest
|
||||
|
||||
https://jestjs.io/docs/using-matchers
|
||||
- https://jestjs.io/docs/using-matchers
|
||||
- https://dev.to/zaklaughton/the-only-3-steps-you-need-to-mock-an-api-call-in-jest-39mb
|
||||
- https://jestjs.io/docs/mock-functions#mocking-modules
|
||||
|
||||
## TODO
|
||||
|
||||
idea: mock functions of `onoff` to test behaviour of functions which rely on GPIO being low/high
|
||||
|
||||
check this out: https://stackoverflow.com/questions/50066138/mock-fs-function-with-jest
|
||||
|
||||
is this going to be a problem? https://stackoverflow.com/questions/62568294/nodejs-fs-watch-inside-docker-container-detects-changes-twice
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
const Gpio = require('onoff').Gpio;
|
||||
const mqtt = require('mqtt');
|
||||
|
||||
const actiontrigger = {
|
||||
|
||||
/**
|
||||
* those arguments should be part of the object
|
||||
* which should also be mockabke
|
||||
* @param {onoff.Gpio} gpio
|
||||
* @param {mqtt.Client} client
|
||||
*/
|
||||
pubMqttOnGpio (gpio, client) {
|
||||
console.log('gpio: ');
|
||||
if (gpio.readSync() === Gpio.LOW) {
|
||||
client.publish('button/islow', '{true}', {qos: 1})
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
sleep(ms) {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, ms);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = actiontrigger
|
|
@ -0,0 +1,16 @@
|
|||
const Gpio = require('onoff').Gpio;
|
||||
const action = require('./action-on-gpio');
|
||||
|
||||
// https://stackoverflow.com/questions/51418086/jest-expected-mock-function-to-have-been-called-but-it-was-not-called
|
||||
describe('integration test', () => {
|
||||
it('should publish mqtt when GPIO goes high', () => {
|
||||
|
||||
const button = { readSync: jest.fn(() => Gpio.LOW)}
|
||||
const client = { publish: jest.fn()}
|
||||
|
||||
action.pubMqttOnGpio(button, client);
|
||||
expect(button.readSync).toHaveBeenCalledTimes(1)
|
||||
expect(client.publish).toHaveBeenCalledTimes(1)
|
||||
expect(client.publish).toBeCalledWith('button/islow', '{true}', {qos: 1})
|
||||
})
|
||||
})
|
|
@ -5,7 +5,6 @@
|
|||
"scripts": {
|
||||
"start": "node app.js",
|
||||
"test": "jest"
|
||||
|
||||
},
|
||||
"author": {
|
||||
"name": "CR",
|
||||
|
@ -17,6 +16,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"fix": "^0.0.6",
|
||||
"mqtt": "^4.3.7"
|
||||
"mqtt": "^4.3.7",
|
||||
"onoff": "^6.0.3"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue