首页 > 解决方案 > 使用 node / express / mocha / MongoDB 测试 POST 请求不起作用

问题描述

使用 node / express / mocha / MongoDB 测试 POST 请求不起作用,但对失眠的 post 请求有效。我不确定问题是什么。错误消息只是 Uncaught AssertionError: expected 404 to equal 200。

app.spec.js

process.env.NODE_ENV = "test";
const request = require("supertest");
const chai = require("chai");
const expect = chai.expect;
const app = require("../app");
const Product = require("../models/productsModel");
const User = require("../models/usersModel");

let product;
before((done) => {
  //use an instance of your model to write a test
  product = Product.create({
    name: "skirt",
    description: "green flared",
    price: "15",
  }).then(() => done());
});

describe("/api", () => {
  describe("/users", () => {
    let product;
    describe.only("POST", () => {
      it("status: 200, returns the product that has been created", (done) => {
        request(app)
          .post("/api/users")
          .send({ name: "Shirt", description: "Green", price: 20 })
          .end((err, res) => {
            product = res.body;
            console.log(res.body, "<--res");
            expect(res.status).to.eq(200);
            expect(res.body.name).to.eq("Shirt");
            done();
    });
  });
    });
  });
});

after((done) => {
  Product.deleteMany({}).then(() => done());
});

控制器.js

//inserting a product into the database
exports.createProduct = (req, res, next) => {
  const { name, description, price } = req.body; //deconstruct values from the request body
  //mongodb generates new body anyway
  let newProduct = new Product({
    //set variable to new instance of Product model with values
    name,
    description,
    price,
  });
  newProduct.save(); //save model to database
  res.status(200).send({ product: newProduct }); //send back to the user the new product
};

标签: node.jsmongodbexpressmocha.jschai

解决方案


这是由于我的 api 路由器在 app.js 文件中设置的超时。


推荐阅读