Javascript Mocha单元测试:未捕获类型错误:无法读取属性';应用';未定义的

Javascript Mocha单元测试:未捕获类型错误:无法读取属性';应用';未定义的,javascript,node.js,testing,Javascript,Node.js,Testing,我想为Restful端点编写单元测试,但每当我运行npm测试时。我得到错误Uncaught TypeError:无法读取未定义的属性'apply' let chai = require('chai') let chaiHttp = require('chai-http') let home = require('../routes/home') let user = require('../routes/users') //Assertion Style chai.should() chai.

我想为Restful端点编写单元测试,但每当我运行npm测试时。我得到错误Uncaught TypeError:无法读取未定义的属性'apply'

let chai = require('chai')
let chaiHttp = require('chai-http')
let home = require('../routes/home')
let user = require('../routes/users')
//Assertion Style
chai.should()

chai.use(chaiHttp)

describe('chow Api', () => {
  //  users
    describe("GET /api/chow/home", () => {
        it('it should render Welcome to Homepage', (done) =>{
            chai.request(home)
            .get("/api/chow/home")
            .end((err, response) =>{
                response.should.have.status(200)
                response.body.should.be('string')
                done()
            })
        })
    })

    describe('GET /api/chow/users', () => {
        it('it should GET all the users', (done) => {
            chai.request(user)
            .get("/api/chow/users")
            .end((err, response) =>{
                response.should.have.status(200)
                response.should.be.a('array')
                done()
            })
        })
    })
})
也许你应该试试:

const app = require("./app.js")
chai.request(app).get("/api/chow/users")
chai.request(app).get("/api/chow/users")

请尝试:

。。。。
.get(“/”/)这应该是当前路由的相对路径
.end((错误,响应)=>{
如果(错误)返回完成(错误)
响应.应具有.状态(200)
response.body.should.be('string')
完成()
});

如果没有看到路线代码,我不能100%肯定。但是,
TypeError:当您访问未定义的对象属性或方法时,无法对未定义的
执行任何操作。我建议打印回复以获得一些见解。另外,请分享您的路线逻辑。如果没有这一点,就很难确定错误的来源

遵循为摩卡测试工作所做的更改

index.js
中, 您应该添加此行
module.exports=app以启动服务器

const express = require("express");
const app = express();

const homeController = require("./routes/home");

app.use("/home", homeController);

const port = process.env.PORT || 5000;

app.listen(port, () => {
    console.log("Server started at port", port);
});

module.exports = app;
test/routes/home.js
中,您应该添加
.get(“/home”)
res.text.should.equal(“Hello World!”)
要通过
/home
端点的摩卡测试

const chai = require("chai");
const chaiHTTP = require("chai-http");

const mainEntryPoint = require("../../index");

chai.should();
chai.use(chaiHTTP);

describe("Entry point", () => {
    context("GET /", () => {
        it("should get greeting back", (done) => {
            chai.request(mainEntryPoint)
                .get("/home")
                .end((err, res) => {
                    if (err) throw err;
                    res.text.should.equal("Hello World!");
                    done();
                });
        });
    });
});


请提供您的家庭和用户路线的简要内容。更具体地说,您从这些模块导出的内容。并且还提供了错误的完整堆栈。@jeeves,虽然我不能得到OP的确切代码,但我认为我已经复制了确切的错误。这是repo,检查一下,你的端点是否在没有测试的情况下启动?@user3732793,检查我的repo,是的。我已经测试了我的测试repo,不幸的是,没有结果。这是一个可复制的repo Hi,我导出了应用程序,并在测试文件中进行了更改,仍然相同。这是一个快照,
const mainterpoint=require(“../../index”)您还必须更改条目。尝试复制粘贴整个代码@Hasan@Hasan请检查这个pull requestin
chai.request
main file
index.js
必须是入口点,因为服务器必须启动,启动服务器的代码在index.js中,之后,在本例中,您必须提到您要测试的端点
/home
,根据thtat可以检查预期的响应@Hasan,您可以检查这些博客。。。数字海洋博客会给你详细的解释
const chai = require("chai");
const chaiHTTP = require("chai-http");

const mainEntryPoint = require("../../index");

chai.should();
chai.use(chaiHTTP);

describe("Entry point", () => {
    context("GET /", () => {
        it("should get greeting back", (done) => {
            chai.request(mainEntryPoint)
                .get("/home")
                .end((err, res) => {
                    if (err) throw err;
                    res.text.should.equal("Hello World!");
                    done();
                });
        });
    });
});