System Information
- Strapi Version: “@strapi/strapi”: “4.5.5”,
- Operating System: macos
- Database: sqlite
- Node Version: 16.19.0
- NPM Version:
- Yarn Version:
Hi,
added jest test to my existing and running typescript strapi project.
``` strapi.js
const Strapi = require('@strapi/strapi');
const fs = require('fs');
let instance;
async function setupStrapi() {
if (!instance) {
/** the following code in copied from `./node_modules/strapi/lib/Strapi.js` */
await Strapi().load();
instance = strapi; // strapi is global now
await instance.server
.use(instance.server.router.routes()) // populate KOA routes
.use(instance.server.router.allowedMethods()); // populate KOA methods
await instance.server.mount();
}
return instance;
}
On test start i got:
TypeError: Cannot read properties of undefined (reading ‘forEach’)
7 | if (!instance) {
8 | /** the following code in copied from `./node_modules/strapi/lib/Strapi.js` */
> 9 | await Strapi().load();
| ^
10 |
11 | instance = strapi; // strapi is global now
12 |
at node_modules/@strapi/strapi/lib/services/server/register-routes.js:98:21
at node_modules/lodash/lodash.js:4967:15
at baseForOwn (node_modules/lodash/lodash.js:3032:24)
at node_modules/lodash/lodash.js:4936:18
at Function.forEach (node_modules/lodash/lodash.js:9410:14)
at registerAPIRoutes (node_modules/@strapi/strapi/lib/services/server/register-routes.js:94:7)
at Object.<anonymous>.module.exports (node_modules/@strapi/strapi/lib/services/server/register-routes.js:25:3)
at Object.initRouting (node_modules/@strapi/strapi/lib/services/server/index.js:96:13)
at Strapi.bootstrap (node_modules/@strapi/strapi/lib/Strapi.js:465:23)
at Strapi.load (node_modules/@strapi/strapi/lib/Strapi.js:478:5)
at setupStrapi (src/tests/helpers/strapi.js:9:3)
at Object.<anonymous> (src/tests/app.test.js:5:2)
The routes are undefined here :
```register-routes.js from strapi package
/**
* Register api routes
* @param {import('../../').Strapi} strapi
*/
const registerAPIRoutes = (strapi) => {
for (const apiName of Object.keys(strapi.api)) {
const api = strapi.api[apiName];
const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);
_.forEach(api.routes, (router) => {
// TODO: remove once auth setup
// pass meta down to compose endpoint
router.type = 'content-api';
router.routes.forEach((route) => {
generateRouteScope(route);
route.info = { apiName };
});
return strapi.server.routes(router);
});
}
};