chai test.catch() 블록의 올바른 사용을 마스터하세요
P粉242535777
P粉242535777 2023-09-02 12:25:27
0
1
362

내 코드 베이스의 엔드투엔드 테스트를 통해 좋은 적용 범위를 얻으려고 노력하고 있으므로 .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의 제안에 따라 (단순화된) 모델과 필수 모듈에 대한 전체 정보를 추가했습니다...

P粉242535777
P粉242535777

모든 응답 (1)
P粉610028841

저에게 아주 좋습니다.

예:

user.model.js

으아악

user.controller.js

으아악

server.js

으아악

user.test.js

으아악

테스트 결과:

으아악

패키지 버전:

으아악
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!