Hi,
a qt developer would lough at this, but it works for me and as it took me some hrs to set it up, here a howto for whoever it may help.
two years ago i tried typescript and did jasmine tests on typescript code, but the conversion from ts to js code that can be consumed in an sfos was a pain
the gain from typecript was in fact not that great on my simple code so …
i am currently on windows, using visual studio code and qt creator in parallel.
- install node.js, it comes with npm as package manager
- run node --version, npm -version to check that your path env var is setup correctly
- install jest, that would be the test framework
- my tests are in /test folder
- my js code is in qml
- my tests are executed in dist folder
why, cause my js code that runs in sfos wont run in node, there are some .pragma, and .import statements which is not understood by node.js
so i have a script that converts my js sources to js that is understood by node, which was quite simple:
- change the import statements to require
- add some exports at the bottom
- copy test files to dist too
- run tests in dist folder
done
this:
.import “Persistance.js” as DB
to that:
const DB = require(’./Persistance.js’);
and add the bottom for each method i want to test:
module.exports = { getUsersUpcommingEvents, getUsersTrackedItems, getUpcommingEventsForTrackedItem } ;
a few moder details:
after node installation
open the app folder you want to work in and then only install jest.
that will create a package.json file in the root folder, that wont be used by app but you wont deploy it anyway …
in package.config i have added this:
{
“jest”: {
“testMatch”: ["/dist/**/*Test.js"]
},
“scripts”: {
“pre-test”: “node ./test/pre-test.js”,
“test”: “jest”
} …
a) to tell jest how to find tests
b) to test npm what to execute
npm run pre-test
will run the script that does the conversion and copy all to dist
npm run test
will execute the testcases
you can check the scripts etc in my sailkick repo
yes there are also other obstacles, like the httptrequest object in qt may differ from the one in node, but that was easy to overcome, i made the object injectable which i would have needed anyway for any kind of mocking, and luckily the interface was same (only made sure to use the front-end httprequest and in browser and not the backend one as used in node.js itself …