Как сравнить произвольный сложный объект с Mocha+Chai, игнорируя свойства функции

В приведенном ниже примере работает второй тест (в указанной позиции находится свойство функции). Первый тест не работает, потому что Чай не может корректно сравнивать функции.

      import { assert as Assert } from "chai";

describe("Test", (): void => {

  const normalizedRouting: Router.NormalizedRouting = Router.normalizeRouting(new Map([
    routeWidthHandlerFor4SegmentsPathWithParameterizedLastOne
  ]));


  it("The structure is matching with expected", (): void => {
    Assert.deepEqual(normalizedRouting[HTTP_Methods.get], {
      users: {
        matchesForRouteParameterInNextPosition: {
          name: "userID",
          matchesForStaticSegmentsInNextPosition: {
            posts: {
              matchesForRouteParameterInNextPosition: {
                name: "postID",
                matchesForCurrentPosition:
                  async(request: HTTP.IncomingMessage, response: HTTP.ServerResponse): Promise<void> => {
                    await new Promise<void>((resolve: () => void, reject: (error: Error) => void): void => {
                      console.log(request);
                      console.log(response);
                      console.log(reject);
                      resolve();
                    });
              }
            }
          }
        }
      }
    });
  });

  it("The route handles has bees placed correctly", (): void => {
    Assert.isFunction(
        normalizedRouting[HTTP_Methods.get].users?.
        matchesForRouteParameterInNextPosition?.
        matchesForStaticSegmentsInNextPosition?.posts?.
        matchesForRouteParameterInNextPosition?.matchesForCurrentPosition
    );
  });
});

С точки зрения логики непонятно, что означает «функция1 глубоко равна функции2», так что можно сравнивать только нефункциональные свойства. Но как заставить Чай пропустить эти свойства во время глубокой проверки на равенство?

Обратите внимание, что проверка каждого свойства на каждом уровне глубины недопустима - слишком много рутины.

      Assert.isObject(normalizedRouting[HTTP_Methods.get].users);
Assert.isObject(normalizedRouting[HTTP_Methods.get].users?.matchesForRouteParameterInNextPosition);
// ...

0 ответов

Другие вопросы по тегам