如何使用 chai 测试猫鼬查询的 .catch() 条件?

问题描述 投票:0回答:0

我正试图通过我的代码库端到端测试实现全面覆盖,所以我也想测试

.catch()
代码。
我的 API 使用 node.js 和猫鼬。
为了测试,我使用 chai 和 mocha。

我正在尝试这样的事情:

文件 user.controller.js:

const getUser = async(req, res) => {
  try {
    const user = await User.findOne({name: req.name});
    return res.status(200).json(user);
  } catch (err) {
    // THIS IS THE CODE I WANT TO TEST
    console.error(`Error finding user ${req.name}:`, err);
    return res.status(err.code).json({ message: err });
  }
}

文件测试/user.test.js:

 describe("should handle mongoose errors", function() {
    describe("faulty User.findOne method", function() {
      const _User_findOne_Backup = User.findOne;
      beforeEach(function() {
        User.findOne = function() {
          return Promise.reject("forced error");
        };
      });
      afterEach(function(){
        User.findOne = _User_findOne_Backup; 
      }); 

      it("signup should respond with a server error", function() {
        const spy = chai.spy();
        return chai
          .request(server)
          .post("/api/getUser")
          .send({name: "Alice"})
          .then(spy)
          .catch((err) => {
            const res = err.response;
            res.should.have.status(500);
          })
          .then(() => {
            spy.should.not.have.been.called();
          })
        ;
      });
    });
  });

问题是在我的测试中从未调用过假的

findOne()
方法,并且
getUser
方法从不抛出,使我的测试失败...

可能我遗漏了一些明显的东西,但我真的找不到它...... :-(
如果需要更多代码或上下文,请索取...

javascript node.js try-catch mocha.js chai
© www.soinside.com 2019 - 2024. All rights reserved.