"validateData"라는 함수는 격리되어 테스트되었으며 간단하게하기 위해 2 개의 테스트가 있지만이 함수를 다른 함수 (예 :통합 테스트를 적용 할 때 결합 된 함수를 테스트하는 올바른 방법은 무엇일까요?
)와 결합하면 동일한 테스트를 반복합니다. SRC/컨트롤러/사용자/createUser.js
export function validateData(data) {
if (!data) {
const err = new Error('data must be present');
err.code = 400;
throw err;
}
return data;
}
export async function createUser(data) {
validateData(data);
try {
const user = await UserModel.create(data);
return 'ok';
} catch(err) {
throw err;
}
}
export default createUser;
SRC/라우터/사용자 /하는 index.js
// Dependencies:
import { Router } from 'express';
import users from 'controllers/user/createUser';
import { methodNotAllowed } from 'utils/helpers';
// Helpers:
const router = Router();
router.route('/users')
.post((req, res) => {
createUser(req.body)
.then(summary => res.status(201).json({ message: "created" }))
.catch(err => res.status(400).json({ err: err.message }));
})
.all(methodNotAllowed(`Use solely POST method in this action.`));
테스트/컨트롤러/사용자/createUser.test.js
import { should, expect } from 'chai';
import { validateData, createUser } from 'controllers/user/createUser';
describe('Controller',() => {
describe('#validateData',() => {
describe('when data is not send',() => {
it("should return error: 'data must be present'",() => {
(() => validateData(null))
.should.Throw("'data' must be present")
.with.property('code', 400);
});
});
describe('when data is sent',() => {
it("should return the same data input",() => {
const input = { firstName: 'Norman', lastName: 'etc' };
const output = validateData(input);
output.should.equal(input);
});
});
});
describe('#createUser',() => {
describe('when data is not send',() => {
it("should return error: 'data must be present'", async() => {
try {
await createUser(null)
} catch(err) {
err.should.include({
code: 400,
message: "data must be present"
});
}
});
});
describe('when data is sent',() => {
it("should return the same data input", async() => {
const input = { firstName: 'Norman', lastName: 'etc' };
const output = await createUser(input);
output.should.equal('ok');
});
});
});
});
그래서 나는 그것이 같은 오류가 발생 할 수 있습니다 "는 createUser"기능에 동일한 기능 "validateData"를 재사용하고있어 보는 경우에 그 이전에 "#validateData"describe 블록에서 테스트되었습니다.
테스트 소프트웨어에서는 괜찮습니까?
또한이 두 함수를 express와 함께 재사용해야하므로 "validateData"에 대한 테스트가 3 번 테스트됩니다.
1. #validateData, 2. #createUser and 3. #POST /users
나는 나에게 좋아 보이지만 내가 원하는 결과를 얻기 위해 결합 된 많은 기능을 가지고 테스트가 지저분 의존하고 있기 때문에이 확인 있는지 알고 싶습니다.
같은 "validateData"를 여러 번 테스트하고 여러 위치에서 테스트하는 것이 좋을지도 모릅니다. 응답 해 주셔서 감사합니다. – Norman