결론: TDD하더라도 하향식으로 만들어나가는 게 좋을 듯. 상향식은 시간이 너무 많이 걸리고, 특히 sequelize 이용하는 경우 까다로운 부분이 많음.
공식 튜토리얼 참고하되, get 관련은 아래 링크 참고
supertest.Response.body JavaScript and Node.js code examples | Tabnine
객체 비교는 toStrictEqual
활용하기!
const request = require("supertest");
const { sequelize } = require("../../models");
const app = require("../../app");
beforeAll(async () => {
await sequelize.sync({});
});
describe("/main", function () {
it("GET /main/status", function (done) {
request(app)
.get("/main/status?UserId=1")
.set("Accept", "application/json")
.expect((res) => {
console.log(res.body);
**expect(res.body).toStrictEqual({
nickname: "테스트",
history: 9,
deposit: 1000000,
containStockAsset: 8000,
});**
})
.expect(200, done);
});
});
⭐ 결론: sequelize-mock으로 findall, findone등 하는 건 좋지 않은 선택임. sequelize-mock은 post를 위주로(create) 만들어진 라이브러리인 듯.
[Received function did not throw 문제]
:JEST Received function did not throw, but HTTPError is thrown
[supertest랑 같이 쓰면서 계속 db 못 찾는 문제]
: cannot connect to db · Issue #680 · visionmedia/supertest
: Environment Variables · Jest
jest는 자동으로 NODE_ENV를 test로 설정해 줌.
config/index.js
```jsx
// dotenv 사용 시 config.json -> config.js로 사용.
require("dotenv").config();
const env = process.env;
const development = {
username: env.MYSQL_USERNAME,
//env.MYSQL_USERNAME은 불러오고자 하는 데이터의 키값이므로 자유롭게 이름설정이 가능하다.
password: env.MYSQL_PASSWORD,
database: env.MYSQL_DATABASE,
host: env.MYSQL_HOST,
dialect: "mysql",
port: env.MYSQL_PORT,
};
const production = {
username: env.MYSQL_USERNAME,
password: env.MYSQL_PASSWORD,
database: env.MYSQL_DATABASE,
host: env.MYSQL_HOST,
dialect: "mysql",
port: env.MYSQL_PORT,
};
const test = {
username: env.TEST_USERNAME,
password: env.TEST_PASSWORD,
database: env.TEST_DATABASE,
host: env.TEST_HOST,
dialect: "mysql",
port: env.TEST_PORT,
};
module.exports = { development, production, test };
```
- .env
```jsx
MYSQL_HOST=localhost
MYSQL_USERNAME=root
MYSQL_PASSWORD=비밀번호
MYSQL_DATABASE=damdadb
MYSQL_PORT=3306
RDS_HOST=localhost
RDS_USERNAME=root
RDS_PASSWORD=비밀번호
RDS_DATABASE=damdadb
RDS_PORT=3306
TEST_HOST=localhost
TEST_USERNAME=root
TEST_PASSWORD=비밀번호
TEST_DATABASE=damdadbtest
TEST_PORT=3306
```
위와 같이 설정해주면 잘 됨.