Node Express Mocha测试:TypeError:chai.request不是一个函数

时间:2018-09-02 23:44:32

标签: node.js typescript express mocha chai

我有一个Typscript应用程序和API。我针对大量Google搜索编写了以下测试,并在此处以及其他地方找到了一些示例。我认为测试代码中没有问题。谷歌搜索TypeError: chai.request is not a function,到目前为止,我现在正在哪里。您在下面看到我的错误了吗?

谢谢,谢谢,谢谢您的帮助:-)

enter image description here

6 个答案:

答案 0 :(得分:1)

如果启用esModuleInterop编译器选项,则可以重现该问题。启用此选项后,import * as chai from 'chai';仅导入chai模块在​​导入时具有的成员。确实,我认为在运行时将导出添加到ES模块是不明智的。尝试使用import chai from 'chai';import chai = require('chai');;有人在为我工作。

答案 1 :(得分:0)

您正在混合使用importrequire语法,这是个坏主意!

仅使用import语法:

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

chai.use(chai-http);

修改

不幸的是,chai-http中似乎不支持es6模块语法。您可以看到问题here

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

chai.use(chai-http);

答案 2 :(得分:0)

我可以在自己的机器上重现该问题。这就是我解决的方法。

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

chai.use(chaiHttp);

我还需要安装 @ types / chai-http ,以便编译器知道。

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

希望有帮助

答案 3 :(得分:0)

非常感谢您的答复!最终,我不得不更改chai.request的导入位置/方式,并重写了很多测试内容。根据测试中的代码,您可能会认为前5行中的1条或更多条不是必需的,但它们都是 all 。假设其余api在3000上启动,则以下代码可以工作并且测试通过。

我是否正确编写此api请求测试?我现在正在学习Mocha / Chai,所以可能是错误的...

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');
        });
    });

});

答案 4 :(得分:0)

我通过以下方法(带有TypeScript的Express.js)解决了此问题

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

chai.use(chaiHttp);

希望有帮助。

答案 5 :(得分:0)

从github安装

"devDependencies": {
    "chai-http": "git+https://github.com/chaijs/chai-http.git",
  },