>  Q&A  >  본문

chai test.catch() 블록의 올바른 사용을 마스터하세요

<p>내 코드 베이스의 엔드투엔드 테스트를 통해 좋은 적용 범위를 얻으려고 노력하고 있으므로 <code>.catch()</code> 코드도 테스트하고 싶습니다. </p><p> 내 API는 node.js와 몽구스를 사용합니다. </p><p> 테스트에는 chai와 mocha를 사용합니다.</p> <p>다음과 같은 것을 시도해 보았습니다. </p> <p><em>파일 src/controllers/user.controller.js:</em></p> <pre class="brush:php;toolbar:false;">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 }); } }</pre> <p><em>파일 src/models/user.model.js:</em></p> <pre class="brush:php;toolbar:false;">const mongoose = require("몽구스"); const UserSchema = 몽구스.스키마({ 이름: { 유형: 문자열, 필수: "이름이 필요합니다", }, }); module.exports = mongoose.model("User", UserSchema);</pre> <p><em>test/user.test.js 파일:</em></p> <pre class="brush:php;toolbar:false;">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(); }) ; }); }); });</pre> <p>문제는 내 테스트에서 가짜 <code>User.findOne()</code> 메서드가 호출되지 않는다는 것입니다. 원래의 몽구스 <code>findOne</code> 메서드는 성공적으로 호출되었습니다. 따라서 <code>getUser</code> 메소드는 예외를 발생시키지 않아 테스트가 실패하게 됩니다...</p> <p>아마 제가 뭔가 분명한 것을 놓치고 있는 것 같지만 실제로는 찾을 수 없습니다... :-(</p><p> 더 많은 코드나 컨텍스트가 필요한 경우 알려주시기 바랍니다...</p> <p><strong>업데이트: </strong> @Bergi의 제안에 따라 (단순화된) 모델과 필수 모듈에 대한 전체 정보를 추가했습니다...</p>
P粉242535777P粉242535777388일 전406

모든 응답(1)나는 대답할 것이다

  • P粉610028841

    P粉6100288412023-09-03 00:41:51

    저에게 아주 좋습니다.

    예:

    user.model.js

    으아악

    user.controller.js

    으아악

    server.js

    으아악

    user.test.js

    으아악

    테스트 결과:

    으아악

    패키지 버전:

    으아악

    회신하다
    0
  • 취소회신하다