Node Express Mocha test: TypeError: chai.request не является функцией - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть приложение Typscript и API. Я написал приведенный ниже тест для многочисленных поисков в Google и некоторых примеров, найденных здесь в SO и других местах. Я не вижу проблем в тестовом коде. Погуглил TypeError: chai.request is not a function, пока куда меня заводит. Вы видите мою ошибку ниже?

Спасибо, спасибо, спасибо за любую помощь: -)

enter image description here

Ответы [ 6 ]

0 голосов
/ 25 апреля 2019

установка с github

"devDependencies": {
    "chai-http": "git+https://github.com/chaijs/chai-http.git",
  },
0 голосов
/ 27 ноября 2018

Я решил это следующим способом (Express.js с TypeScript)

import chai from 'chai';
import chaiHttp from 'chai-http';

chai.use(chaiHttp);

Надеюсь, это поможет.

0 голосов
/ 06 сентября 2018

Большое спасибо за ответы! В конечном итоге мне пришлось изменить, куда / как импортировать chai.request, и переписать тест. Основываясь на коде в тесте, вы можете подумать, что 1 или более из первых 5 строк не являются необходимыми, но они все являются необходимыми. Предполагая, что остальные API запущены на 3000, следующий код работает, и тест проходит.

Правильно ли я пишу этот запрос на API? Я только сейчас изучаю Мокко / Чай, так что это, вероятно, неправильно ...

import * as chai from 'chai';
import chaiHttp = require('chai-http');
chai.use(chaiHttp);
import { Response } from 'superagent';
import { request, expect } from 'chai';

describe('AppController', () => {
    describe('Route GET /app', () => {
        it('Should GET to /app', async () => {
            const res: Response = await request('http://0.0.0.0:3000').get('/app');
            expect(res).to.have.status(200);
            expect(res).to.be.a('object');
        });
    });

});
0 голосов
/ 05 сентября 2018

Я могу воспроизвести проблему на своей машине. Вот как я это решаю.

import * as chai from 'chai';
import chaiHttp = require('chai-http');

chai.use(chaiHttp);

Мне также нужно установить @ types / chai-http , чтобы компилятор знал.

npm install @types/chai-http --save-dev

Надеюсь, это поможет

0 голосов
/ 04 сентября 2018

Я могу воспроизвести проблему, если включить опцию компилятора esModuleInterop. Когда эта опция включена, import * as chai from 'chai'; импортирует только те элементы, которые есть у модуля chai на момент его импорта. В самом деле, я считаю, что добавлять экспорт в модуль ES во время выполнения считается глупым. Попробуйте вместо import chai from 'chai'; или import chai = require('chai');; любой из них работает на меня.

0 голосов
/ 03 сентября 2018

Вы смешиваете синтаксис import и require, это плохая идея!

Использовать только import синтаксис:

import * as chai from 'chai';
import * as chai-http from 'chai-http'

chai.use(chai-http);

Редактировать

К сожалению, похоже, что синтаксис модуля es6 не поддерживается в chai-http. Вы можете увидеть вопрос здесь

import * as chai from 'chai';
import chaiHttp = require('chai-http');

chai.use(chai-http);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...