인프런 커뮤니티 질문&답변

이태희님의 프로필 이미지
이태희

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

통합테스트 질문

작성

·

138

0

통합테스트 회원가입 로그인 하고 있는데요

맨 마지막에 아래 코드를 넣어도 계속 오류가 발생합니다. 

afterAll(async () => {
    await sequelize.sync({ force: true });
});

[오류내용]

  ● POST /join › 이미 로그인 했으면 redirect /

    expected "Location" of "/?error=%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%ED%95%9C%20%EC%83%81%ED%83%9C%EC%9E%85%EB%8B%88%EB%8B%A4.", got "/error=%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%95%9C%20%EC%83%81%ED%83%9C%EC%9E%85%EB%8B%88%EB%8B%A4."

      43 |                 password: 'nodejsbook',
      44 |             })
    > 45 |             .expect('Location', `/?error=${message}`)
         |              ^
      46 |             .expect(302, done);
      47 |     });
      48 |

      at Object.<anonymous> (routes/auth.test.js:45:14)

[원본소스는 아래와 같습니다.]

.expect('Location', `/?error=${message}`);  이부분 주석 해제를 하면 오류가 발생합니다. 왜 그런건가요?

const request = require('supertest');
const { sequelize } = require('../models');
const app = require('../app');

beforeAll(async () => {
    await sequelize.sync();
});

describe('POST /join', () => {
    test('로그인 안 했으면 가입', (done) => {
        request(app)
            .post('/auth/join')
            .send({
                email: 'zerohch0@gmail.com',
                nick: 'zerocho',
                password: 'nodejsbook',
            })
            .expect('Location', '/')
            .expect(302, done);
    });
});

describe('POST /join', () => {
    const agent = request.agent(app);
    beforeEach((done) => {
        agent
            .post('/auth/login')
            .send({
                email: 'zerohch0@gmail.com',
                password: 'nodejsbook',
            })
            .end(done);
    });

    test('이미 로그인 했으면 redirect /', (done) => {
        const message = encodeURIComponent('로그인 한 상태입니다.');

        agent
        .post('/auth/join')
            .send({
                email: 'zerohch1@gmail.com',
                nick: 'zerocho1',
                password: 'nodejsbook',
            })
            .expect('Location', `/?error=${message}`)
            .expect(302, done);
    });

});

afterAll(async () => {
    await sequelize.sync({ force: true });
});

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

decodeURI('%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%ED%95%9C%20%EC%83%81%ED%83%9C%EC%9E%85%EB%8B%88%EB%8B%A4.", got "/error=%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%95%9C%20%EC%83%81%ED%83%9C%EC%9E%85%EB%8B%88%EB%8B%A4')

"로그인 한 상태입니다.", got "/error=로그인한 상태입니다"

띄어쓰기 때문이네요.

이태희님의 프로필 이미지
이태희
질문자

답변 주신것처럼

"로그인 한 상태입니다."에서 "로그인한 상태입니다,"로 변경해도 똑같이 에러가 발생합니다.

test('이미 로그인 했으면 redirect /', (done) => {
        const message = encodeURIComponent('로그인한 상태입니다.');
        agent
        .post('/auth/join')
        .send({
            email: 'zerohch0@gmail.com',
            nick: 'zerocho1',
            password: 'nodejsbook',
        })
        .expect('Location', `/?error=${message}`)
        .expect(302, done);
    });

저도 동일한 내용의 에러가 납니다.

띄워쓰기를 하지 않아도 에러가 나네요

혹시 해당 에러 잡으셨나요?

아래 해당 줄을 없애면 에러가 나지 않습니다.

.expect('Location' , `/?error=${message}`)
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

에러나는 걸 마찬가지로 저처럼 decodeURIComponent 해보세요. 그럼 한글이 보입니다.

이태희님의 프로필 이미지
이태희

작성한 질문수

질문하기