단위 테스트 - mocha 모듈

Posted by 단순대왕 javascript : 2014. 9. 23. 11:42

mocha 모듈은 테스트를 쉽게 만들어주는 모듈입니다.


설치

#> npm install -g mocha


테스트

#> mocha test.js

#> mocha --reporter spec


예)

describe('list', function () {

describe('item 1', function () {

it('test a', function () { });

it('test b', function () { });

});

describe('item 2', function () {

it('test a', function () { });

it('test b', function () { });

it('test c', function () { });

});

});

'javascript' 카테고리의 다른 글

단위 테스트 - QUnit  (0) 2014.09.22
require.js  (0) 2014.09.22
커피스크립트 문법 #3  (0) 2014.09.22
커피스크립트 문법 #2  (0) 2014.09.22
커피스크립트 문법 #1  (0) 2014.09.22
  

단위 테스트 - QUnit

Posted by 단순대왕 javascript : 2014. 9. 22. 18:16

단위 테스트 - 함수 또는 메서드를 실험하고 평가하는 것


QUnit 라이브러리

SITE: http://qunitjs.com

jQuery 재단에서 만든 라이브러리로 가장 자주 사용되는 단위 테스트 라이브러리 

(클라이언트 자바스크립트) 입니다.

예)

<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.10.0.css" />

<script src="http://code.jquery.com/qunit/qunit-1.10.0.js"></script>

<body>

<div id="qunit"></div>

<script>

</script>

</body>


라이브러리 기본 함수

test() - 테스트를 생성합니다. 

ok() - 테스트를 완료합니다.


라이브러리 테스트 메서드

deepEqual() - 깊은 비교로 비교합니다.

equal() - 얕은 비교로 비교합니다.

strictEqual() - Strict Equal(===) 연산자로 비교합니다.

notDeepEqual() - deepEqual() 메서드의 반대 의미를 갖습니다.

notEqual() - equal() 메서드의 반대 의미를 갖습니다.

notStrictEqual() - strictEqual() 메서드의 반대 의미를 갖습니다.

ok() - 테스트 완료를 나타냅니다.

throws() - 예외가 발생하는지 확인합니다.


얕은 비교는 참조를 비교합니다.

깊은 비교는 내부에 있는 데이터를 하나씩 비교합니다.

var a = new Date(2014,09,22)

var b = new Date(2014,09,22)

alert(a == b) // FALSE - 얕은 비교 - 다른 참조 값


라이브러리 비동기 테스트 메서드

asynTest() - 비동기 테스트를 선언합니다.

start() - 테스트를 시작합니다.

expect() - 테스트 개수를 지정합니다.


'javascript' 카테고리의 다른 글

단위 테스트 - mocha 모듈  (0) 2014.09.23
require.js  (0) 2014.09.22
커피스크립트 문법 #3  (0) 2014.09.22
커피스크립트 문법 #2  (0) 2014.09.22
커피스크립트 문법 #1  (0) 2014.09.22
  

require.js

Posted by 단순대왕 javascript : 2014. 9. 22. 17:03

require.js 라이브러리는 클라이언트에서도 require() 함수를 사용할 수 있게 해주는 라이브러리 입니다.

기존의 script 태그로 스트립트 파일을 추가하면 HTML 페이지의 문서 객체 모델을 구성할 때

동기적으로 라이브러리를 추가합니다.

라이브러리의 용량이 작다면 웹 페이지 로딩 속도에 영향을 끼치지 않습니다.

하지만 라이브러리 용량이 커지면 웹 페이지의 로딩 속도에 영향을 주게 됩니다.

require.js 라이브러리는 AMD (Asynchronous Module Definition) 관련 라이브러리입니다.

따라서 비동기적으로 라이브러리를 읽어 처리합니다.


라이브러리 설정

SITE: http://requirejs.org


라이브러리 기본 사용 방법

require.js 라이브러리는 모듈 추가 라이브러리입니다.

모듈은 define() 메서드로 만듭니다. define() 메서드의 매개변수에는 함수를 넣습니다.

이 함수에서 리턴하는 객체가 모듈이 됩니다.

예 - 모듈 생성)

define(function(){

return{

version: '0.0.1',

add: function(a,b){

},

minus: function(a,b){

}

}

});

예 - 사용)

<script src="require.js"></script>

<script>

require(['moduleA'], function(A){

alert(A.add(52, 273));

});

</script>

'javascript' 카테고리의 다른 글

단위 테스트 - mocha 모듈  (0) 2014.09.23
단위 테스트 - QUnit  (0) 2014.09.22
커피스크립트 문법 #3  (0) 2014.09.22
커피스크립트 문법 #2  (0) 2014.09.22
커피스크립트 문법 #1  (0) 2014.09.22
  

커피스크립트 문법 #3

Posted by 단순대왕 javascript : 2014. 9. 22. 15:44

함수

함수를 생성할 때는 () -> 형태의 기호를 사용합니다.

예)

randomInteger = (limit) -> 

Math.round Math.random() * limit

함수를 호출할 때는 괄호를 사용할 필요가 없습니다. 하지만 매개변수가 없을 경우에는 반드시 괄호를

사용해야 합니다.


클래스

예)

class Person

constructor: (name, language, region) ->

@name = name

@language = language

@region = region

toString: () ->

return "#{@name} - #{@language} - #{@region}"

list = [

new Person("", "", "")

new Person("", "", "")

]

console.log item.toString() for item in list


프로토타입


상속


'javascript' 카테고리의 다른 글

단위 테스트 - QUnit  (0) 2014.09.22
require.js  (0) 2014.09.22
커피스크립트 문법 #2  (0) 2014.09.22
커피스크립트 문법 #1  (0) 2014.09.22
커피스크립트 설치/ 컴파일/ 실행  (0) 2014.09.22
  

커피스크립트 문법 #2

Posted by 단순대왕 javascript : 2014. 9. 22. 15:36

객체

예)

person = 

name: "RintIanTta"

language: "JavaScript"

region: "Seoul, KOREA"

console.log person.name, person.language, person.region

괄호와 쉼표는 필요 없지만 반드시 들여쓰기 해야합니다.


범위 객체

[0..2]     => [0,1,2]      // 2 포함

[0...2]    => [0,1]        // 2 포함하지 않음


반복문

예)

for i in [0...10]

console.log "#{i} - Loop"

예)

for i in [9..0]

console.log "#{i} - Loop"

예)

for i in [0..10] by 2

console.log "#{i" - Loop"

예)

for key, value of person

console.log "#{key} - #{value}"


반복 조합 배열

반복 조합 배열은 반복문으로 새로운 배열을 쉽게 생성합니다.

예)

array = for key, value of person

"#{key} - #{value}"

console.log array

예)

array = []

for i in [0..100]

array.push Math.round(Math.random() * 100)

array = for item in array when item % 2 is 0

console.log array


'javascript' 카테고리의 다른 글

require.js  (0) 2014.09.22
커피스크립트 문법 #3  (0) 2014.09.22
커피스크립트 문법 #1  (0) 2014.09.22
커피스크립트 설치/ 컴파일/ 실행  (0) 2014.09.22
javascript 속성 추가/ strict 모드  (0) 2014.08.12
  

커피스크립트 문법 #1

Posted by 단순대왕 javascript : 2014. 9. 22. 15:23

주석

# 한 줄 주석

###

여러 줄 주석

여러 줄 주석

###


함수 호출

console.log 'Hello CoffeeScript'

console.log ('Hello CoffeeScript')

괄호를 입력해도 되고, 입력하지 않아도 됩니다.


변수 선언

number = 20

string = 'Hello CoffeeScript'

var 키워드를 사용하지 않습니다.


문자열

string1 = "Hello #{10+2} CoffeeScript"

string2 = 'Hello #{10+2} CoffeeScript'

큰 따옴표를 사용하면 문자열 내부에 특수기호 #{} 형태의 괄호로 코드를 입력할 수 있습니다.

특수기호를 입력한 큰따옴표는 내부의 값이 계산되어 출력됩니다.

string1 = "Hello" + (10+2) + " CoffeeScript"

string2 = 'Hello #{10+2} CoffeeScript'


조건문

if number %2 == 0

alert "even"

else

alert "odd"

괄호를 쓰지 않지만 반드시 들여쓰기 해야합니다.


비교 연산자와 논리 연산자

and, or

예)

if 0 < number and number < 10

또는

if 0 < number < 10            // 이런 형태의 문법도 가능

alert "o < number < 10"

else

alert "number <= 0 and 10 <= number"


'javascript' 카테고리의 다른 글

커피스크립트 문법 #3  (0) 2014.09.22
커피스크립트 문법 #2  (0) 2014.09.22
커피스크립트 설치/ 컴파일/ 실행  (0) 2014.09.22
javascript 속성 추가/ strict 모드  (0) 2014.08.12
javascript 나만 몰랐던 이야기  (0) 2014.07.24
  

커피스크립트 설치/ 컴파일/ 실행

Posted by 단순대왕 javascript : 2014. 9. 22. 12:38

자바스크립트는 원래 대규모 어플리케이션을 개발하고자 만들어진 프로그래밍 언어가 아닙니다.

따라서 다른 프로그래밍 언어와 달리 클래스를 만드는 정해진 방법도 없고 변수 범위가 엉키는 경우도

많습니다.

이러한 문제를 해결하고자 자바스크립트 컴파일 엔진이 만들어졌습니다.

자바스크립트 컴파일 엔진이란 특정한 형태의 프로그래밍 언어로 작성된 파일을 자바스크립트로 

변환하는 프로그램을 의미합니다.

대표적으로 커피스크립트와 MS의 타입스크립트, google의 다트가 있습니다.


커피스크립트는 루비 프로그래밍 언어 형식으로 자바스크립트 컴파일 엔진으로 클래스 생성과

반복 조합 배열, 함수 바인딩 등을 손쉽게 할 수 있습니다.


설치

#] npm install -g coffee-script

#] coffee

coffee>

컴파일 및 실행

#] coffee Basic        // 실행

#] coffee -c Basic   // 커피스크립트 파일 -> 자바스크립트  파일로 컴파일


'javascript' 카테고리의 다른 글

커피스크립트 문법 #2  (0) 2014.09.22
커피스크립트 문법 #1  (0) 2014.09.22
javascript 속성 추가/ strict 모드  (0) 2014.08.12
javascript 나만 몰랐던 이야기  (0) 2014.07.24
javascript 이벤트  (0) 2014.07.23
  

javascript 속성 추가/ strict 모드

Posted by 단순대왕 javascript : 2014. 8. 12. 12:32

1. 속성 - 동적 추가

var object = {};

object.name = 'rint';

object.hobby = ['Guitar','Piano'];


2. 속성 메소드 동적 추가

Object.prototype.iterate = function(callback){

for(var key in this){

callback(key, this[key], this);

}

};

({ // 객체 생성 

name: 'rint',

hobby: ['Guitar','Piano']

})

.iterate(function(key, item){ // 객체 속성 추가

console.log(key, item);

});

[CONSOLE LOG]

name rint 

hobby ["Guitar", "Piano", iterate: function]

iterate function (callback){

for(var key in this){

callback(key, this[key], this);

}

javascript에서 동적으로 추가한 속성은 모두 보여진다.


ECMAScript5의 객체 메소드

Object.create(Object, properties) - 새로운 객체를 생성해 리턴

Object.defineProperty(Object, name, property) - 객체에 속성을 하나 정의

Object.defineProperties(Object, properties) - 객체에 속성을 여러 개 정의


ECMAScript5의 객체를 이용한 속성 추가

Object.defineProperties(Object.prototype, {

iterate: {

value: function(callback){

for(var key in this){

callback(key, this[key], this);

}

}

}

});

({

name: 'rint',

hobby: ['Guitar','Piano']

})

.iterate(function(key, item){

console.log(key, item);

});

[CONSOLE LOG]

name rint

hobby ["Guitar", "Piano"] 


strict 모드

var object = { one: 10, one: 20 };

오류는 아니지만, 사용자가 쓸데 없는 코드를 작성했을 경우 오류를 발생시키고 싶다면 use strict

스크립트의 가장 앞 부분에 사용합니다.

'use strict';

var object = { 

one: 10, 

one: 20 

};

함수 단위로 strict 모드 적용

function(){

'use strict';

var object = { one: 10, one: 20 };

})();

'javascript' 카테고리의 다른 글

커피스크립트 문법 #1  (0) 2014.09.22
커피스크립트 설치/ 컴파일/ 실행  (0) 2014.09.22
javascript 나만 몰랐던 이야기  (0) 2014.07.24
javascript 이벤트  (0) 2014.07.23
javascript 클래스  (0) 2014.07.21
  

javascript 나만 몰랐던 이야기

Posted by 단순대왕 javascript : 2014. 7. 24. 12:08

function()의 default arguments

$(function(){

function args_test(){

// 함수에서 인자값을 받지 않아도 기본적으로 arguments 라는 이름으로 인자를 받는다.

// 배열로 처리하여 받는다.

var args = $.makeArray(arguments);

// arguments 이외의 값은 받지 않는다.

var args = $.makeArray(arg_value);        // 실행 안됨

var ev = args.shift();

alert(ev);

}

$(window).load(function(){

// function에서 인자값을 받지 않아도 값을 넘기면 arguments로 받는다.

args_test('test');

});

})(jQuery);


eval() - 변수를 javascript의 함수처럼 쓰는 명령어 

var i = 1;

str += "document.test.check"+i+".value";

alert(str); // document.test.check1.value

str += eval("document.test.check"+i+".value");

alert(str); // 1


기본 이벤트

textarea 태그의 기본 이벤트는 사용자가 입력한 글자를 출력하는 것입니다.

이벤트 리스너에서 내부 글자를 비워도 기본 이벤트가 실행되면서 입력한 글자(Enter)를 출력합니다.

textarea.onkeypress = function(event){

if (event.keyCode == ENTER && event.shiftKey == false){

this.value = "";

return false;    // 기본 이벤트를 제거합니다. == preventDefault();

}

}

[이벤트 실행 과정] 

이벤트 발생 -> 이벤트 리스너 실행 -> 기본 이벤트 실행

[onKeypress 이벤트의 문제] 

이벤트 발생 -> 이벤트 리스너 실행 -> [글자 제거] - > 기본 이벤트 실행 (EnterKey 출력) 


'javascript' 카테고리의 다른 글

커피스크립트 설치/ 컴파일/ 실행  (0) 2014.09.22
javascript 속성 추가/ strict 모드  (0) 2014.08.12
javascript 이벤트  (0) 2014.07.23
javascript 클래스  (0) 2014.07.21
MVC 패턴  (0) 2014.07.21
  

javascript 이벤트

Posted by 단순대왕 javascript : 2014. 7. 23. 14:36

이벤트 라이브러리

DOM이 준비된 다음에 페이지의 이미지와 스타일시트를 내려받는다.

DOMContentLoaded는 페이지의 이미지와 스타일시트를 내려받기 전에 실행된다.

사용자가 페이지와 상호작용을 하기 전에 항상 DOMContentLoaded가 먼저 호출된다.

모든 브라우저가 DOMContentLoaded 이벤트를 지원하지 않는다. jQuery는 ready() 함수로 기능을 추상화


컨텍스트 변경

브라우저에서 제공하는 addEventListener()를 이용하면 기존의 지역 컨텍스트가 대상 HTML 엘리먼트

컨텍스트로 바뀐다.

jQuery의 proxy() 함수 패턴을 사용한다.

예)$("signinForm").submit($.proxy(function(){ /* ... */ }, this));


이벤트 위임

이벤트 버블링 방식은 일반적으로 자식의 이벤트를 검사할 수 있도록 부모에 리스너를 추가한다.

jQuery의 delegate() 함수에 자식 셀렉터, 이벤트 타입, 핸들러를 넘겨줘서 이벤트를 위임할 수 있다.

예)

// 모든 <li> 엘리먼트에 리스너를 추가하는 방식

$("ul li").click(function(){ /* ... */ });

// 한 개의 이벤트 리스너만 추가한다.

$("ul").delegate("li", "click", /* ... */);

이벤트 위임을 사용하면 동적으로 자식을 엘리먼트에 추가해도 추가한 자식의 이벤트가 이미 있다.


커스텀 이벤트

jQuery에서는 trigger() 함수로 커스텀 이벤트를 발생시킬 수 있다.

예)

// 커스텀 이벤트 바인드

$(".class"). bind on("refresh.widget", function(){});

// 커스텀 이벤트 발생

$(".class").trigger("refresh.widget");


trigger() 함수에 인자를 추가해서 이벤트 핸들러로 데이터를 전달할 수 있다.

$(".class"). bind on("frob.widget", function(event, data){

console.log(data);

});

$(".class").trigger("frob.widget", 5);


커스텀 이벤트와 jQuery 플러그인

사용자가 리스트 항목을 클릭하면 해당 항목에 활성 클래스를 추가하고 다른 항목의 활성 클래스 제거

<ul id="tabs">

<li data-tab="users">Users</li>

<li data-tab="groups">Groups</li>

</ul>

<div id="tabContent">

<div data-tab="users">USERS</div>

<div data-tab="groups">GROUP</div>

</div>

<style>

.active{background-color: #b0c4de;}

</style>

<script type="text/javascript">

$(function(){

$("ul#tabs").tabs("#tabContent");

})(jQuery);

</script>

<script type="text/javascript">

$.fn.tabs = function(control){

var element = $(this);

control = $(control);

element.find("li").bind("click", function(){

element.find("li").removeClass("active");

$(this).addClass("active");

var tabName = $(this).attr("data-tab");

control.find(">[data-tab]").removeClass("active");

control.find(">[data-tab='"+tabName+"']").addClass("active");

});

element.find('li:first').addClass('active');

return this;

};

</script>

수정 -> delegate(), on()

<script type="text/javascript">

$.fn.tabs = function(control){

var element = $(this);

control = $(control);

element.delegate("li", "click", function(){

// 탭 이름을 얻는다.

var tabName = $(this).attr("data-tab");

// 탭을 클릭하면 커스터 이벤트가 발생한다.

element.trigger("change.tabs", tabName);

});

// 커스텀 이벤트를 바인드한다.

element.bind on("change.tabs", function(e, tabName){

element.find("li").removeClass("active");

element.find(">[data-tab='" + tabName + "']").addClass("active");

});

element.bind on("change.tabs", function(e, tabName){

control.find(">[data-tab]").removeClass("active");

control.find(">[data-tab='"+tabName+"']").addClass("active");    

});

// 첫 번째 탭 활성화 - 초기값

var firstName = element.find("li:first").attr("data-tab");

element.trigger("change.tabs", firstName);

return this;

};

</script>


DOM 이외의 이벤트

사용자 이벤트 핸들러 라이브러리를 생성할 수 있다.

발행자/구독자 이벤트 핸들러 패턴 (http://en.wikipedia.org/wiki/Publish/subscribe)

발행자가 특정 채널로 메세지를 발행하면 채널을 구독하는 구독자는 발생자가 새 메세지를 발행했다는

알림을 수신한다.

var PubSub = {

subscribe: function(ev, callback){

// _callbacks 오브젝트가 없으면 새로 만든다.

var calls = this._callbacks || (this._callbacks = {});

// 이벤트 키에 해당하는 배열이 없으면 배열을 만든 다음 콜백을 배열에 추가한다.

(this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback);

return this;

},

publish: function(){

// arguments 오브젝트를 진짜 배열로 바꾼다.

// var args = Array.prototype.slice.call(arguments, 0);

var args = $.makeArray(arguments);

// 이벤트 이름을 포함하는 첫 번째 인자를 추출한다.

var ev = args.shift();

// _callbacks 오브젝트가 없거나 해당 이벤트의 배열을 포함하지 않으면 반환한다.

var list, calls, i, l;

if(!(calls = this._callbacks)) return this;

if(!(list = this._callbacks[ev])) return this;

// 콜백을 호출한다.

for(i = 0, l = list.length; i < l; i++){

list[i].apply(this, args);

}

return this;

}

};


// 사용 예제

PubSub.subscribe("wem", function(){

alert("Wem!");

});


PubSub.publish("wem");

'javascript' 카테고리의 다른 글

커피스크립트 설치/ 컴파일/ 실행  (0) 2014.09.22
javascript 속성 추가/ strict 모드  (0) 2014.08.12
javascript 나만 몰랐던 이야기  (0) 2014.07.24
javascript 클래스  (0) 2014.07.21
MVC 패턴  (0) 2014.07.21
  
 «이전 1 2  다음»