Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions koans/01_Introduction.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ describe('expect에 대해서 학습합니다.', function () {
expect(true).to.be.true;
*/
// TODO: 테스트가 통과될 수 있도록(테스트하는 값이 true가 되도록) expect의 첫 번째 전달인자를 수정합니다.
expect(false).to.be.true;
expect(true).to.be.true;
});

it('테스트하는 값(expect의 전달인자)이 falsy 여부를 검사합니다.', function () {
// 반대의 경우에는 어떻게 해야할까요?
// TODO: 테스트가 통과될 수 있도록(테스트하는 값이 false가 되도록) expect의 첫 번째 전달인자를 수정합니다.
expect(true).to.be.false;
expect(false).to.be.false;
});

/*
Expand All @@ -53,7 +53,7 @@ describe('expect에 대해서 학습합니다.', function () {
it("'테스트하는 값'을 '기대하는 값'과 비교한 결과가 참 인지 확인합니다.", function () {
// '테스트하는 값'은 우리가 작성한 어떤 코드의 실제 실행 결과 값이므로 '실제 값'이라고 불러도 됩니다.
let actualValue = 1 + 1;
let expectedValue = FILL_ME_IN; // TODO: 'FILL_ME_IN'을 변경하여 테스트 케이스를 완성합니다.
let expectedValue = 2; // TODO: 'FILL_ME_IN'을 변경하여 테스트 케이스를 완성합니다.
expect(actualValue === expectedValue).to.be.true;
});

Expand All @@ -68,13 +68,13 @@ describe('expect에 대해서 학습합니다.', function () {
이후에도 같은 방식으로 'FILL_ME_IN' 변경하면 됩니다.
*/
it('Matcher .equal 의 사용법을 학습합니다.', function () {
let expectedValue = FILL_ME_IN; // TODO
let expectedValue = 1+1; // TODO
// .equal은 두 값이 타입까지 엄격하게 같은지 검사(strict equality, ===)합니다.
expect(1 + 1).to.equal(expectedValue);
});

it('Matcher .equal의 사용법을 학습합니다.', function () {
let actualValue = (1 + 1).toString();
expect(actualValue).to.equal(FILL_ME_IN); // TODO
expect(actualValue).to.equal('2'); // TODO
});
});
12 changes: 6 additions & 6 deletions koans/02_Types-part1.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
describe('type에 대해서 학습합니다.', function () {
it("비교연산자 '=='는 두 값의 일치 여부를 느슨하게 검사(loose equality)합니다.", function () {
let actualValue = 1 + 1;
let expectedValue = FILL_ME_IN;
let expectedValue = 2;
expect(actualValue == expectedValue).to.be.true;

/*
Expand Down Expand Up @@ -33,26 +33,26 @@ describe('type에 대해서 학습합니다.', function () {

it("비교연산자 '==='는 두 값의 일치 여부를 엄격하게 검사(strict equality)합니다.", function () {
let actualValue = 1 + 1;
let expectedValue = FILL_ME_IN;
let expectedValue = 2;
expect(actualValue === expectedValue).to.be.true;
// 이제 'FILL_ME_IN'을 대신할 수 있는 건 number 타입의 2뿐입니다.
// 문자열 '2'는 테스트를 통과하지 못합니다.
});

it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측해 봅니다.', function () {
expect(1 + '1').to.equal(FILL_ME_IN);
expect(1 + '1').to.equal('11');
});

it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측해 봅니다.', function () {
expect(123 - '1').to.equal(FILL_ME_IN);
expect(123 - '1').to.equal(122);
});

it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측해 봅니다.', function () {
expect(1 + true).to.equal(FILL_ME_IN);
expect(1 + true).to.equal(1true); // 2
});

it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측해 봅니다.', function () {
expect('1' + true).to.equal(FILL_ME_IN);
expect('1' + true).to.equal('1true');
});

/*
Expand Down
12 changes: 6 additions & 6 deletions koans/03_LetConst.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ describe("'const'에 대해서 학습합니다.", function () {
it("'const'로 선언된 변수에는 재할당(reassignment)이 금지됩니다.", function () {
// 아래 코드에서 문제가 되는 부분을 삭제합니다.
const constNum = 0;
constNum = 0;
//constNum = 0;
expect(constNum).to.equal(0);

const constString = 'I am a const';
constString = "which means I'm a constant variable, delete me.";
//constString = "which means I'm a constant variable, delete me.";
expect(constString).to.equal('I am a const');
});

it("'const'로 선언된 배열의 경우 새로운 요소를 추가하거나 삭제할 수 있습니다.", function () {
const arr = [];
const toBePushed = FILL_ME_IN;
const toBePushed = 42;
arr.push(toBePushed);
expect(arr[0]).to.equal(42);

Expand All @@ -22,15 +22,15 @@ describe("'const'에 대해서 학습합니다.", function () {

it("'const'로 선언된 객체의 경우, 속성을 추가하거나 삭제할 수 있습니다.", function () {
const obj = { x: 1 };
expect(obj.x).to.equal(FILL_ME_IN);
expect(obj.x).to.equal(1);

delete obj.x;
expect(obj.x).to.equal(FILL_ME_IN);
expect(obj.x).to.equal(undefined);

// 여전히 재할당은 금지됩니다.
// obj = { x: 123 };

obj.occupation = FILL_ME_IN;
obj.occupation = 'SW Engineer';
expect(obj['occupation']).to.equal('SW Engineer');
});

Expand Down
64 changes: 32 additions & 32 deletions koans/04_Scope.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ describe('scope 대해서 학습합니다.', function () {
it('함수 선언식(declaration)과 함수 표현식(expression)의 차이를 확인합니다.', function () {
let funcExpressed = 'to be a function';

expect(typeof funcDeclared).to.equal(FILL_ME_IN);
expect(typeof funcExpressed).to.equal(FILL_ME_IN);
expect(typeof funcDeclared).to.equal('function');
expect(typeof funcExpressed).to.equal('string');

function funcDeclared() {
return 'this is a function declaration';
Expand All @@ -17,10 +17,10 @@ describe('scope 대해서 학습합니다.', function () {
// 자바스크립트 함수 호이스팅(hoisting)에 대해서 검색해 봅니다.

const funcContainer = { func: funcExpressed };
expect(funcContainer.func()).to.equal(FILL_ME_IN);
expect(funcContainer.func()).to.equal('this is a function expression');

funcContainer.func = funcDeclared;
expect(funcContainer.func()).to.equal(FILL_ME_IN);
expect(funcContainer.func()).to.equal('this is a function declaration');
});

it('lexical scope에 대해서 확인합니다.', function () {
Expand All @@ -39,34 +39,34 @@ describe('scope 대해서 학습합니다.', function () {
return message;
}

function shadowParameter(message) {
message = 'Do not use parameters like this!';
return message;
function shadowParameter(message) { //외부인자를 받고
message = 'Do not use parameters like this!'; //재할당 하고있음
return message; //'Do not use parameters like this!' 반환됨
}

expect(getMessage()).to.equal(FILL_ME_IN);
expect(shadowGlobal()).to.equal(FILL_ME_IN);
expect(shadowGlobal2('Parameter')).to.equal(FILL_ME_IN);
expect(shadowParameter('Parameter')).to.equal(FILL_ME_IN);
expect(message).to.equal(FILL_ME_IN);
expect(getMessage()).to.equal('Outer');
expect(shadowGlobal()).to.equal('Inner');
expect(shadowGlobal2('Parameter')).to.equal('Parameter');
expect(shadowParameter('Parameter')).to.equal('Do not use parameters like this!');
expect(message).to.equal('Outer');
});

it('default parameter에 대해 확인합니다.', function () {
function defaultParameter(num = 5) {
function defaultParameter(num = 5) { //초기값 설정 , 외부인자 들어오면 우선순위됨
return num;
}

expect(defaultParameter()).to.equal(FILL_ME_IN);
expect(defaultParameter(10)).to.equal(FILL_ME_IN);
expect(defaultParameter()).to.equal(5);
expect(defaultParameter(10)).to.equal(10);

function pushNum(num, arr = []) {
arr.push(num);
return arr;
}

expect(pushNum(10)).to.deep.equal(FILL_ME_IN);
expect(pushNum(20)).to.deep.equal(FILL_ME_IN);
expect(pushNum(4, [1, 2, 3])).to.deep.equal(FILL_ME_IN);
expect(pushNum(10)).to.deep.equal([10]);
expect(pushNum(20)).to.deep.equal([20]);
expect(pushNum(4, [1, 2, 3])).to.deep.equal([1, 2, 3, 4]);
});

it('클로저(closure)에 대해 확인합니다.', function () {
Expand All @@ -76,12 +76,12 @@ describe('scope 대해서 학습합니다.', function () {
};
}

const increaseBy3 = increaseBy(3);
const increaseBy3 = increaseBy(3); //
const increaseBy5 = increaseBy(5);

expect(increaseBy3(10)).to.equal(FILL_ME_IN);
expect(increaseBy5(10)).to.equal(FILL_ME_IN);
expect(increaseBy(8)(6) + increaseBy(5)(9)).to.equal(FILL_ME_IN);
expect(increaseBy3(10)).to.equal(13);
expect(increaseBy5(10)).to.equal(15);
expect(increaseBy(8)(6) + increaseBy(5)(9)).to.equal(28); // (6+8) + (9+5)

/*
mdn에 따르면 클로저의 정의는 다음과 같습니다. 반드시 기억하시기 바랍니다.
Expand Down Expand Up @@ -114,23 +114,23 @@ describe('scope 대해서 학습합니다.', function () {
let height = 178;

function innerFn() {
age = 26;
age = 26; //outerFn()->age 24를 26으로 바꿈
let name = 'suga';
return height;
return height; // outerFn()의 height 반환
}

innerFn();
innerFn(); //실행

expect(age).to.equal(FILL_ME_IN);
expect(name).to.equal(FILL_ME_IN);
expect(age).to.equal(26); // outerFn 안에 포함
expect(name).to.equal('jimin');

return innerFn;
return innerFn; //함수 자체를 반환 (실행x)
}

const innerFn = outerFn();
const innerFn = outerFn(); //outerFn 실행하는코드

expect(age).to.equal(FILL_ME_IN);
expect(name).to.equal(FILL_ME_IN);
expect(innerFn()).to.equal(FILL_ME_IN);
expect(age).to.equal(27);
expect(name).to.equal('jimin'); // outer가 선언한 name X -> 재할당함
expect(innerFn()).to.equal(178); // innerFn 반환 값 178
});
});
22 changes: 11 additions & 11 deletions koans/05_ArrowFunction.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,27 @@ describe('화살표 함수에 관해서', function () {
return x + y
}

expect(add(5, 8)).to.eql(FILL_ME_IN)
expect(add(5, 8)).to.eql(5 + 8)
})

it('화살표 함수 사용법을 익힙니다', function () {
// function 키워드를 생략하고 화살표 => 를 붙입니다
const add = (x, y) => {
return x + y
}
expect(add(10, 20)).to.eql(FILL_ME_IN)
expect(add(10, 20)).to.eql(10+20)

// 리턴을 생략할 수 있습니다
const subtract = (x, y) => x - y
expect(subtract(10, 20)).to.eql(FILL_ME_IN)
expect(subtract(10, 20)).to.eql(10-20)

// 필요에 따라 소괄호를 붙일 수도 있습니다
const multiply = (x, y) => (x * y)
expect(multiply(10, 20)).to.eql(FILL_ME_IN)
expect(multiply(10, 20)).to.eql(200)

// 파라미터가 하나일 경우 소괄호 생략이 가능합니다
const divideBy10 = x => x / 10
expect(divideBy10(100)).to.eql(FILL_ME_IN)
expect(divideBy10(100)).to.eql(10)
})

it('화살표 함수를 이용해 클로저를 표현합니다', function () {
Expand All @@ -34,19 +34,19 @@ describe('화살표 함수에 관해서', function () {
}
}

expect(adder(50)(10)).to.eql(FILL_ME_IN)
expect(adder(50)(10)).to.eql(60)

const subtractor = x => y => {
return x - y
}

expect(subtractor(50)(10)).to.eql(FILL_ME_IN)
expect(subtractor(50)(10)).to.eql(40)

const htmlMaker = tag => textContent => `<${tag}>${textContent}</${tag}>`
expect(htmlMaker('div')('javascript')).to.eql(FILL_ME_IN)
expect(htmlMaker('div')('javascript')).to.eql('<div>javascript</div>')

const liMaker = htmlMaker('li')
expect(liMaker('1st item')).to.eql(FILL_ME_IN)
expect(liMaker('2nd item')).to.eql(FILL_ME_IN)
const liMaker = htmlMaker('li') //<li>undefined</li> : 커링함수
expect(liMaker('1st item')).to.eql('<li>1st item</li>')
expect(liMaker('2nd item')).to.eql('<li>2nd item</li>')
})
})
Loading