Я пытаюсь создать расширение для супер-теста.
Используя то, что я нашел в вопросе Расширение SuperTest . У меня есть этот рабочий пример на javascript
:
const request = require('supertest');
const Test = request.Test;
Test.prototype.authenticate = function(user) {
const {token, xsrfToken} = user.tokens;
return this
.set('Authorization', `Bearer ${token}`)
.set('X-XSRF-TOKEN', xsrfToken);
}
И внутри тестового блока я могу использовать:
request(app)
.post('/user/settings')
.authenticate(user)
.send(...)
Это прекрасно работает. Теперь проблема в том, чтобы использовать расширение в файле *.test.ts
.
Как предлагается в Расширить Express Объект запроса, используя Typescript , я пытаюсь создать файл для использования функции машинописного текста Декларация слияния .
// file location: ./src/types/supertest
declare namespace supertest {
export interface Test {
authenticate(user: any): this; // I didn't put a type on user to simplify here.
}
}
, а также изменил мой tsconfig.json
{
"compilerOptions": {
...
"typeRoots": ["./src/types"],
...
}
}
Но когда я запускаю npx tsc
$ npx tsc
src/api/user.test.ts:51:8 - error TS2551: Property 'authenticate' does not exist on type 'Test'.
51 .authenticate(user);
~~~~~~~
Вопрос
Есть ли способ исправить это в среде машинописи?
[РЕДАКТИРОВАТЬ]
Дополнительная информация (не обязательно полезная):
В том же проекте у меня есть расширения на express
, chai
и pdf-merge-js
. Все они прекрасно работают, используя подход, описанный выше.
В supertest
, возможно, в @types/supertest
есть что-то особенное, что мешает ему работать.
Это небольшой фрагмент кода в моем проекте, который уже работает для express:
// file location: ./src/types/express
import { ModelBase } from '../../models/base';
declare global {
namespace Express {
export interface Response {
model: (model: ModelBase) => this;
}
}
}