initial commit

This commit is contained in:
Frieder Schlesier 2022-11-09 20:28:42 +01:00
commit f2d3961686
6 changed files with 149 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

30
README.md Normal file
View File

@ -0,0 +1,30 @@
# GPIO-mock test nodejs
test gpio in a container (without them being physically available)
idea/initial mock forked from: https://github.com/sitepoint-editors/TddWithGpio
Article: https://www.sitepoint.com/getting-started-with-the-raspberry-pi-gpio-pins-in-node-js/
## run dev
~~~shell
docker run -it --rm -v $(pwd):/app -w /app node:lts bash
~~~
followed by
~~~shell
npm install
npm run test
~~~
## Jest
https://jestjs.io/docs/using-matchers
## TODO
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

17
app.js Normal file
View File

@ -0,0 +1,17 @@
var gpio = require('./gpio');
gpio.open(16, 'out', function () {
var on = 0;
var blinker = setInterval(function () {
gpio.write(16, on, function () {
on = (on + 1) % 2;
console.log('ON = ' + on);
});
}, 1000);
setTimeout(function () {
clearInterval(blinker);
}, 12000);
});

27
gpio.js Normal file
View File

@ -0,0 +1,27 @@
var fs = require('fs');
// Post 3.18.x kernel
var sysFsPath = '/sys/class/gpio/gpio';
var pinMapping = {
'16': 23
};
function open(pinNumber, direction, callback) {
const path = sysFsPath + pinMapping[pinNumber] + '/direction';
fs.writeFile(path, direction, (callback || noOp));
}
function write(pinNumber, value, callback) {
const path = sysFsPath + pinMapping[pinNumber] + '/value';
value = !!value ? '1' : '0';
fs.writeFile(path, value, 'utf8', callback);
}
function noOp() {}
module.exports = {
open: open,
write: write
};

22
package.json Normal file
View File

@ -0,0 +1,22 @@
{
"name": "tdd-with-gpio",
"version": "0.0.1",
"main": "app.js",
"scripts": {
"start": "node app.js",
"test": "jest"
},
"author": {
"name": "CR",
"email": "reyesc@gmail.com"
},
"devDependencies": {
"jest": "^29.3.1",
"mock-fs": "^5.2.0"
},
"dependencies": {
"fix": "^0.0.6",
"mqtt": "^4.3.7"
}
}

52
test/gpio.test.js Normal file
View File

@ -0,0 +1,52 @@
var mock = require('mock-fs');
var fs = require('fs');
var gpio = require('../gpio');
describe('GPIO API', function () {
it('opens a pin with out', function (done) {
mock({
'/sys/class/gpio/gpio23/direction': ''
});
gpio.open(16, 'out', function () {
const direction = fs.readFileSync('/sys/class/gpio/gpio23/direction').toString();
expect(direction).toEqual('out');
done();
});
});
it('writes to a pin with a high value', function (done) {
mock({
'/sys/class/gpio/gpio23/value': '0'
});
gpio.write(16, 5, function () {
const value = fs.readFileSync('/sys/class/gpio/gpio23/value').toString();
expect(value).toEqual('1');
done();
});
});
it('writes to a pin with a low value', function (done) {
mock({
'/sys/class/gpio/gpio23/value': '1'
});
gpio.write(16, 0, function () {
const value = fs.readFileSync('/sys/class/gpio/gpio23/value').toString();
expect(value).toEqual('0');
done();
});
});
afterEach(function () {
mock.restore();
});
});