2013-08-06 3 views
2

테스트에 사용할 변수를 설정하는 방법을 이해하는 데 문제가 있습니다. 예를 들어 spark.isTriple() 함수는 숫자를 사용하여 dice라는 배열을보고 값이 세 번 이상 나오면 true를 반환하고 그렇지 않으면 false를 반환합니다.모카 테스트에서 변수를 설정하는 방법

#In game.coffee 

window.spark = 
    isTriple: (n)->   
    triples = _.filter dice, (i)-> 
     n is i 
    if triples.length >= 3 
     true 
    else 
     false 

그리고 나는 이렇게 보입니다.

# In game_spec.coffee 

describe 'spark.isTriple', -> 
    it "Should return true if the given value is found 3 or more times in the dice roll", -> 
    dice = [1,2,2,2,4,5] 
    spark.isTriple(2).should.be.true 

문제는 '주사위'가 실제로 rollDice() 함수를 테스트하는 이전 테스트에서 설정된다는 것입니다. 이 테스트에서 주사위는 무작위로 배열 된 값으로 설정되고 테스트와 테스트가 수행되어야합니다. 그러나이 특별한 테스트를 위해서 나는 isTriple() 함수를 테스트하기 위해 특정 배열에 '주사위'를 설정할 수 있기를 원합니다. 나는 "주사위 = [1,2,2,2,3,4]"를 before() 호출과 beforeEach() 호출에 배치하려했지만 아무런 차이가없는 것 같습니다.

누구든지 나에게 도움이나 조언을 주면 많은 도움이 될 것입니다.

답변

0

나는 여기 피터와 동의하지 않을 것이다. 나는 테스트를 가로 지르는 변수에 따라 나쁜 생각이라고 생각합니다. 테스트에서 간헐적으로 이상한 실패를 일으킬 수 있습니다. 테스트의 결과로 변경 될 내용은 해당 테스트에만 포함되어야합니다. 이를 위해, 나는-다시 쓰기 당신을 써서 (커피 콘솔에서)과 같이 코드를 :

window.spark = hasTriple: (dice, n) -> 
    ld.filter(dice, ((i) -> n is i)).length >= 3 
{ hasTriple: [Function] } 
coffee> window.spark.hasTriple([1,2,1,2,5,6], 2) 
false 
coffee> window.spark.hasTriple([1,2,2,2,5,6], 2) 
true 

을 내가 _ 이름 ld (일명 Lodash)에 _ 콘솔에서 특별한 의미를 가지고 있기 때문에 나는 그렇게 그것을 사용하지 않는 것이 좋은 습관이라고 생각하십시오.

+0

나는 계속 전진 해 결국 어쨌든 isTriple에 주사위 배열을 직접 전달해야한다는 것을 알게되었습니다. 피터스의 대답이 효과가 있었는지 아닌지에 대해서는 확신 할 수 없지만, 여기서 말하는 내용에 동의한다고 생각합니다. 이것은 일컬어 더 안전한 청소기를 느낀다. 감사합니다. – Inkspeck

+0

@Inkspeck 도와 주셔서 감사합니다. – jcollum

+0

@jcollum은 일반적으로 동의하지만 beforeEach에서 공유 변수를 구성한 다음 해당 공유 변수의 각 측면에 대해 별도의 테스트를 수행하는 것이 일반적이며 깨끗합니다 (IMHO). 그것은'describe' 블록에 대해 상수가 아닌 변수를 갖는 유일한 시간입니다. –

2

그래서 전체 테스트 스위트에서 사용할 수 있고 before/beforeEach/after/afterEach 중에 조작 할 수있는 변수를 원한다면 mocha + coffeescript는 올바른 범위에서 명시 적 선언을 요구합니다.

describe 'spark.isTriple', -> 
    dice = null #force coffeescript var declaration 
    it "should blah blah", -> 
    dice = [1,2,2,2,4,5] 

나는이 줄을 따라 뭔가 문제를 해결할 것이라고 확신하지만, 문제를 설명하는 전체 파일을 게시하면 확신 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 어쨌든 함수를 리팩터링하는 일이 끝났지 만 비슷한 상황이 다시 발생하면 앞으로 나아갈 것을 제안합니다. 감사합니다. @jcollum. – Inkspeck

관련 문제