내 코드 베이스의 엔드투엔드 테스트를 통해 좋은 적용 범위를 얻으려고 노력하고 있으므로 .catch()
코드도 테스트하고 싶습니다.
내 API는 node.js와 몽구스를 사용합니다.
테스트에는 chai와 mocha를 사용합니다.
다음과 같은 것을 시도해 보았습니다.
파일 src/controllers/user.controller.js:
const User = require("../models/user.model"); const getUser = async(req, res) => 노력하다 { const user = wait User.findOne({name: req.name}); res.status(200).json(사용자)를 반환합니다. } 잡기 (오류) { //테스트하려는 코드입니다. console.error(`${req.name} 사용자를 찾는 동안 오류가 발생했습니다:`, err); return res.status(err.code).json({ 메시지: err }); } }
파일 src/models/user.model.js:
const mongoose = require("몽구스"); const UserSchema = 몽구스.스키마({ 이름: { 유형: 문자열, 필수: "이름이 필요합니다", }, }); module.exports = mongoose.model("User", UserSchema);
test/user.test.js 파일:
const chai = require("chai"); const chaiHttp = require("chai-http"); const spies = require("chai-spies"); const User = require("../src/models/user.model"); chai.use(chaiHttp); chai.use(스파이); chai.should(); explain("몽구스 오류는 처리되어야 합니다.", function() { explain("문제가 있는 User.findOne 메서드", function() { const _User_findOne_Backup = User.findOne; beforeEach(함수() { // 이 함수는 실제 findOne 함수를 오버로드해야 하지만 성공하지 못했습니다!User.findOne = 함수() { return Promise.reject("강제 오류"); }; }); afterEach(function() { //각 테스트 후에 실제 함수를 복원합니다. User.findOne = _User_findOne_Backup; }); it("등록은 서버 오류를 반환해야 합니다.", function() { const spy = chai.spy(); 반환 차이 .request(서버) .post("/api/getUser") .send({이름: "앨리스"}) .그러면(스파이) .catch((err) => { const res = 오류.응답; res.should.have.status(500); }) .then(() => { spy.should.not.have.been.call(); }) ; }); }); });
문제는 내 테스트에서 가짜 User.findOne()
메서드가 호출되지 않는다는 것입니다. 원래의 몽구스 findOne
메서드는 성공적으로 호출되었습니다. 따라서 getUser
메소드는 예외를 발생시키지 않아 테스트가 실패하게 됩니다...
아마 제가 뭔가 분명한 것을 놓치고 있는 것 같지만 실제로는 찾을 수 없습니다... :-(
더 많은 코드나 컨텍스트가 필요한 경우 알려주시기 바랍니다...
업데이트: @Bergi의 제안에 따라 (단순화된) 모델과 필수 모듈에 대한 전체 정보를 추가했습니다...
저에게 아주 좋습니다.
예:
으아악user.model.js
:
으아악user.controller.js
:
으아악server.js
:
으아악user.test.js
:테스트 결과:
으아악패키지 버전:
으아악