Как добавить typehint для пользовательского утверждения chai? - PullRequest
1 голос
/ 11 марта 2020

В проекте для машинописи я создал пользовательское утверждение для библиотеки утверждений, например, так:

// ./tests/assertions/assertTimestamp.ts
import moment = require("moment");
import {Moment} from "moment";

const {Assertion} = require("chai");

const parseDateWithTime = (dateWithTime: string, format = "YYYY-MM-DD hh:mm:ss"): Moment => {
    return moment.utc(dateWithTime, format);
};

const formatTimestamp = (timestampInMs: number): string => {
    return moment.utc(timestampInMs).toISOString();
};

Assertion.addMethod("timestampOf", function (humanReadableDate: string, format = "YYYY-MM-DD hh:mm:ss") {
        const expectedValue = parseDateWithTime(humanReadableDate, format);
        const formatted = formatTimestamp(this._obj);

        new Assertion(this._obj)
            .to.eq(
            expectedValue.valueOf(),
            `\nEXPECTED: "${expectedValue.toISOString()}"\nGOT:      "${formatted}"\n`,
        );
    },
);

Я использую его следующим образом:

require("../assertions/assertTimestamp");
import {expect} from "chai";


describe("My test", () => {
   it("should test timestamp", () => {
     expect(1610841600000).to.be.timestampOf("2021-01-16");
   });
});

И все же я получаю ошибку машинописи :

TS2339:Property 'timestampOf' does not exist on type 'Assertion'.

Я знаю, что могу обойти эту проблему с помощью:

(expect(1610841600000).to.be as any).timestampOf("2021-01-16");

, но я скорее хочу зарегистрировать свой метод в машинописи, чтобы я также мог использовать автозаполнение в моей IDE.

1 Ответ

1 голос
/ 11 марта 2020

В вашем assertTimestamp.ts вы можете добавить:

declare global {
    export namespace Chai {
        interface Assertion {
            timestampOf(date: string, format?: string): void;
        }
    }
}

, он добавит вашу пользовательскую функцию, сохранив при этом существующую.

Если вы запустите тест сейчас, он не будет выполнен , как и ожидалось, с:

AssertionError: 
EXPECTED: "2021-01-16T00:00:00.000Z"
GOT:      "2021-01-17T00:00:00.000Z"
: expected 1610841600000 to equal 1610755200000
Expected :1610755200000
Actual   :1610841600000
...