2017-10-06 2 views
1

현재 레거시 시스템에서 일부 테스트를 작성 중이며 여기서 테스트 결과를 혼동합니다. 테스트는 예상대로 실패하지만 mocha는 결과적으로 1 passing1 failing으로 표시됩니다.약속이있는 모카 단일 테스트가 실패하고 동시에 통과합니다.

내가 Bluebird 약속, 간첩 및 스텁 sinon-chaimocha, chai-as-promisedsinon을 사용하고 있습니다. 이 테스트 (내 문제를 이해하는 데 필요하지 내가 제거한 물건)입니다 :

describe("with a triggerable activity (selection)", function() { 

    beforeEach(function stubData() { 
     stubbedTriggerFunction = sinon.stub(trigger, "newParticipation"); 
     activityLibStub = ... // stub 
     selectionLibStub = ... // stub 
     fakeActivities = ... // simple data with just ONE element 
     fakeSelection = ... // simple data with just ONE element 

     // stub methods to return synthetic data 
     activityLibStub.returns(new Promise(function (resolve) { 
     resolve(fakeActivities); 
     })); 

     selectionLibStub.withArgs(1).returns(new Promise(function (resolve) { 
     resolve(fakeSelection); 
     })); 
    }); 

    afterEach(function releaseStubs() { 
     // restore stubs... 
    }); 

    it("should call the newParticipation function", function() { 

     var member = memberBuilder.buildCorrect(); 
     trigger.allActivities(member) 
     .then(function() { 
      return expect(stubbedTriggerFunction).to.not.have.been.called; 
     }) 
     .done(); 
     }) 
    }); 

예상대로 기능 실제로를 호출하기 때문에이 테스트는 실패합니다. 그러나 모카는 한 테스트가 통과되었고 한 테스트가 실패했다고합니다. 이 모듈에서 구현 한 유일한 테스트입니다.

나는 이것이 약속과 관련이 있다고 확신하지만 그것이 무엇인지 알아 내지 못하는 것 같습니다. 또한 추가 할 경우 모 블록은 테스트를 통과 한 후에도 여전히 블록을 추가 한 후에

.catch(function(){ 
    chai.assert.fail(); 
}) 

을 추가합니다. 이 메서드는 한 번 호출되고 나는 함께 작업 할 하나의 합성 데이터 집합 만 갖습니다. 그래서 저는 그것이 모카에게 이것이 실패한 동안 성공했다는 것을 알려주는 것이지요 ...

아이디어가 있습니까?

감사합니다, Vegaaaa

답변

3
는 약속을 반환, 약속을 반환 약속을 반환

. 모두 함께 노래하자. "돌아 오라, 약속해라!" 즉 일반적으로 블루 버드 유용하지 그리고 여기에 명백히 해가 될 것이기 때문에

it("should call the newParticipation function", function() { 

    var member = memberBuilder.buildCorrect(); 
    return trigger.allActivities(member) 
     .then(function() { 
     return expect(stubbedTriggerFunction).to.not.have.been.called; 
     }); 
    }) 
}); 

는 또한 .done()을 제거했습니다. 모카는 여전히 당신의 약속을 사용해야합니다. 약속을 되 돌리지 않으면 모카 (Mocha)는 테스트를 동 기적으로 취급하고 테스트가 실제로 아무 것도 테스트하지 않기 때문에 성공할 가능성이 가장 높습니다 동기로. 그런 다음 무질서한 실패를 당하면 모카가 정확히 무엇이 실패했는지 결정해야하며 실패를 기록하기 위해 최선을 다할 것입니다.하지만 잘못된 수의 테스트 또는 동일한 테스트가 실패하고 성공한 것으로보고되는 것과 같은 재미있는 일이 발생할 수 있습니다!

+0

오, 알겠습니다. 나는 결코 약속을 되찾고'done()'을 제거하려하지 않았습니다. 그냥 둘 중 하나를 시도해 보았지만 둘 다 결코 시도하지 않았습니다 ... 여전히 Q와 함께 작업하는 데 익숙합니다. Bluebird는 저에게 새로운 것입니다. 이것으로 작동합니다! 고마워요! – Vegaaaa

관련 문제