【问题标题】:Chai-Http always returns 404 error codeChai-Http 总是返回 404 错误码
【发布时间】:2018-03-28 00:51:46
【问题描述】:

所以基本上,我使用 Typescript 从 Node 和 Express 中注销了这个 rest api。我正在尝试使用 chai、chai-http 和 mocha 来测试 api 端点。但是无论运行哪个测试,我总是找不到 404。这是我的代码:

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 来运行测试。

【问题讨论】:

  • 您的测试设置正确,请与我们分享您在终端中遇到的错误文本
  • 这是我的完整日志 - pastebin.com/8dHK1YHZ
  • 尝试删除你的package-lock.json,你可能还需要重新安装你的依赖项
  • 我尝试了您的建议,但仍然是相同的日志。到处都是 404。
  • C:\Users\User\AppData\Roaming\npm-cache\_logs\2018-03-24T04_48_26_904Z-debug.log文件的完整日志是什么

标签: node.js express chai-http


【解决方案1】:

看起来好像您正在异步建立路由(它们仅在您的 mongodb 实例连接后建立)。这可能是问题的一部分,我建议将setRoutes(app) 部分移到承诺链的外部,相反,您可以允许每个路由到await 以进行mongodb 连接: 应用程序.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 };

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 2018-07-15
    • 2017-01-18
    • 2012-04-02
    • 2012-08-16
    • 2013-03-11
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多