Как реализовать модульное тестирование в рамках структуры strapi - PullRequest
3 голосов
/ 16 марта 2020

Я экспериментирую со Strapi и хотел бы создать контроллер, проверенный модульными тестами.

Как настроить юнит-тесты в Strapi?

У меня есть написал следующий тест

test('checks entity inside boundary',async ()=> {
    ctx={};
    var result = await controller.findnearby(ctx);
    result = {};
    expect(result).anyting();
});

, однако внутри моего контроллера у меня есть код, который обращается к глобальному объекту strapi, который вызывает эту ошибку ReferenceError: strapi is not defined

   strapi.log.info('findNearby');
   strapi.log.info(ctx.request.query.lat);
   strapi.log.info(ctx.request.query.long);

Что является лучшим методом с Страпи и тестирование?

1 Ответ

2 голосов
/ 22 апреля 2020

Мне удалось выполнить тестирование в Strapi, создав помощника

const Strapi = require("strapi"); 
// above require creates a global named `strapi` that is an instance of Strapi 

let instance; // singleton 

async function setupStrapi() {
  if (!instance) {
    await Strapi().load();
    instance = strapi; 
    instance.app
      .use(instance.router.routes()) // this code in copied from app/node_modules/strapi/lib/Strapi.js
      .use(instance.router.allowedMethods());
  }
  return instance;
}

module.exports = { setupStrapi };

Теперь вы можете получить все контроллеры из app.controllers и протестировать их один за другим.

Мой пример теста (в Jest) для конечной точки API выглядел бы как

const request = require("supertest");
const { setupStrapi } = require("./helpers/strapi");

// We're setting timeout because sometimes bootstrap can take 5-7 seconds (big apps)
jest.setTimeout(10000);

let app; // this is instance of the the strapi

beforeAll(async () => {
  app = await setupStrapi(); // return singleton so it can be called many times
});

it("should respond with 200 on /heartbeat", (done) => {
  request(app.server) // app server is and instance of Class: http.Server
    .get("/heartbeat")
    .expect(200) // expecting response header code to by 200 success
    .expect("Hello World!") // expecting reponse text to be "Hello World!"
    .end(done); // let jest know that test is finished
});

Я пытался охватить эту топику c в своем блоге https://medium.com/qunabu-interactive/strapi-jest-testing-with-gitlab-ci-82ffe4c5715a

...