Макет функции под роутером в Node js - PullRequest
0 голосов
/ 29 апреля 2020

Пожалуйста, рассмотрите следующий сценарий, но я не смог его решить. Класс вызывается под маршрутизатором ("/"). Я хотел бы проверить вызов маршрутизатора ("/") и смоделировать результат myFun c.

class A {
  myFunc = async () => {
    await ...
    return result
  }
}

Controller file - C:

router.get("/", async (req, res) => {
    var a = new A();

    a.myFunc()
        .then(result => {
            res.json({"message": result});
        }).catch(e => {
            return []
    })
});

C.test.js:

const request = require("supertest");
const app = require("../C");

jest.mock('A');

test("Test route /", async done => {

        const myFuncMock = jest.fn().mockImplementation(() => [...]);
        A.prototype.myFunc = myFuncMock;

        await request(app)
            .get("/")
            .then(res => {
                expect(res.status).toBe(200); // Not asserted
            });
        done()

    });

Я не смог успешно смоделировать результаты функции в роутер.

1 Ответ

0 голосов
/ 30 апреля 2020

Вот решение для интеграционного тестирования:

app.js:

const express = require('express');
const { Router } = require('express');
const A = require('./a');

const app = express();
const router = Router();

router.get('/', async (req, res) => {
  const a = new A();

  a.myFunc()
    .then((result) => {
      res.json({ message: result });
    })
    .catch((e) => {
      return [];
    });
});

app.use(router);

module.exports = app;

a.js:

class A {
  myFunc = async () => {
    const result = await 'real data';
    return result;
  };
}

module.exports = A;

app.test.js:

const app = require('./app');
const request = require('supertest');
const A = require('./a');

jest.mock('./a', () => {
  const mA = { myFunc: jest.fn() };
  return jest.fn(() => mA);
});

describe('61505692', () => {
  afterEach(() => {
    jest.clearAllMocks();
  });
  it('should pass', () => {
    const mA = new A();
    mA.myFunc.mockResolvedValueOnce('fake result');
    return request(app)
      .get('/')
      .then((res) => {
        expect(res.status).toBe(200);
      });
  });
});

результаты интеграционных испытаний с отчетом о покрытии:

 PASS  stackoverflow/61505692/app.test.js (11.834s)
  61505692
    ✓ should pass (34ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |   92.31 |      100 |      75 |   91.67 |                   
 app.js   |   92.31 |      100 |      75 |   91.67 | 16                
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        13.785s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...