Chai-Http 总是 returns 404 错误代码
Chai-Http always returns 404 error code
所以基本上,我已经 api 使用 Typescript 取消了 Node 和 Express。我正在尝试使用 chai、chai-http 和 mocha 来测试 api 端点。但是无论运行哪个测试,我总是得到 404 not found。这是我的代码:
app.ts:
let mongodbURI;
if (process.env.NODE_ENV === "test") {
mongodbURI = process.env.MONGODB_TEST_URI;
} else {
mongodbURI = process.env.MONGODB_URI;
}
mongoose.Promise = global.Promise;
const mongodb = mongoose.connect(mongodbURI, { useMongoClient: true });
mongodb
.then(db => {
setRoutes(app);
if (!module.parent) {
app.listen(app.get("port"), () => { });
}
})
.catch(err => {
console.error(err);
});
export { app };
routes.ts:
export default function setRoutes(app) {
const router = express.Router();
const userCtrl = new UserCtrl();
router.post('/register', userCtrl.createUser);
{ .... }
app.use('/api/v1', router);
}
user.spec.ts:
const should = chai.use(chaiHttp).should();
describe("Users", () => {
it("should create new user", done => {
const user = new User({
name: "testuser",
email: "testuser@example.com",
mobile: "1234567890",
password: "test1234"
});
chai
.request(app)
.post("/api/v1/register")
.send(user)
.end((err, res) => {
res.should.have.status(200);
done();
});
});
});
不仅如此,我尝试的任何路线都出现 404 错误。我在这里做错了什么?
编辑:希望没关系,但我使用 mocha 进行 运行 测试。
看起来您正在异步建立路由(它们仅在您的 mongodb 实例连接后建立)。这可能是问题的一部分,我建议将承诺链的 setRoutes(app)
部分 移到 之外,相反,您可以允许每个路由到 await
对于 mongodb 连接:
app.ts
let mongodbURI;
if (process.env.NODE_ENV === "test") {
mongodbURI = process.env.MONGODB_TEST_URI;
} else {
mongodbURI = process.env.MONGODB_URI;
}
mongoose.Promise = global.Promise;
const mongodb = mongoose.connect(mongodbURI, { useMongoClient: true });
mongodb
.then(db => {
if (!module.parent) {
app.listen(app.get("port"), () => { });
}
})
.catch(err => {
console.error(err);
});
// setRoutes goes here, not inside a Promise
setRoutes(app);
export { app };
所以基本上,我已经 api 使用 Typescript 取消了 Node 和 Express。我正在尝试使用 chai、chai-http 和 mocha 来测试 api 端点。但是无论运行哪个测试,我总是得到 404 not found。这是我的代码:
app.ts:
let mongodbURI;
if (process.env.NODE_ENV === "test") {
mongodbURI = process.env.MONGODB_TEST_URI;
} else {
mongodbURI = process.env.MONGODB_URI;
}
mongoose.Promise = global.Promise;
const mongodb = mongoose.connect(mongodbURI, { useMongoClient: true });
mongodb
.then(db => {
setRoutes(app);
if (!module.parent) {
app.listen(app.get("port"), () => { });
}
})
.catch(err => {
console.error(err);
});
export { app };
routes.ts:
export default function setRoutes(app) {
const router = express.Router();
const userCtrl = new UserCtrl();
router.post('/register', userCtrl.createUser);
{ .... }
app.use('/api/v1', router);
}
user.spec.ts:
const should = chai.use(chaiHttp).should();
describe("Users", () => {
it("should create new user", done => {
const user = new User({
name: "testuser",
email: "testuser@example.com",
mobile: "1234567890",
password: "test1234"
});
chai
.request(app)
.post("/api/v1/register")
.send(user)
.end((err, res) => {
res.should.have.status(200);
done();
});
});
});
不仅如此,我尝试的任何路线都出现 404 错误。我在这里做错了什么?
编辑:希望没关系,但我使用 mocha 进行 运行 测试。
看起来您正在异步建立路由(它们仅在您的 mongodb 实例连接后建立)。这可能是问题的一部分,我建议将承诺链的 setRoutes(app)
部分 移到 之外,相反,您可以允许每个路由到 await
对于 mongodb 连接:
let mongodbURI;
if (process.env.NODE_ENV === "test") {
mongodbURI = process.env.MONGODB_TEST_URI;
} else {
mongodbURI = process.env.MONGODB_URI;
}
mongoose.Promise = global.Promise;
const mongodb = mongoose.connect(mongodbURI, { useMongoClient: true });
mongodb
.then(db => {
if (!module.parent) {
app.listen(app.get("port"), () => { });
}
})
.catch(err => {
console.error(err);
});
// setRoutes goes here, not inside a Promise
setRoutes(app);
export { app };