2015-01-03 3 views
5

실패가 발생할 때 테스트 스위트를 계속할 수있는 방법이 있습니까? 예를함으로써 :CasperJS에서 어설 션이 실패했을 때 테스트 케이스를 계속하려면 어떻게합니까?

casper.test.begin("",3,function suite(){ 
    casper.start(url).then(function(){ 
    test.assert(...); 
    test.assert(...); //If this assert fail, the script stop and the third assert isn't tested 
    test.assert(...); 
    }).run(function(){ 
    test.done(); 
    }); 
}); 

나는 모든 어설 원하는 일부가 실패 할 경우에도 시험한다. 가능한가?

+0

당신이 원하는 보통 것 인 것이다. "검증"접근 방식을 사용할 수도 있습니다.이 방식은 테스트 실행을 검사하지만 중지하지는 않습니다 (아래 답변에서 제안 된 것과 같습니다). 당신이 그런 상황을 갖는 것은 일반적으로 나쁜 테스트 디자인에 관한 신호를 묘사합니다. 하나의 테스트에서 너무 많은 테스트. 솔루션은 별도의 테스트로 분할됩니다. – buxter

답변

6

casperjs google group post에서 확인하십시오. 우리는 내가 원하는처럼이 추적 코드가 작동 casper.then(..

로 어설 둘러싸고 수 있습니다 (그러나이 방법은 아마 최고의 아닌가요?)이 동작을 테스트 장치에 대한

casper.test.begin("",3,function suite(){ 
    casper.start(url).then(function(){ 
    casper.then(function(){ 
     test.assert(...); //if fail, this suite test continue 
    }); 
    casper.then(function(){ 
     test.assert(...); //so if assert(1) fail, this assert is executed 
    }); 
    casper.then(function(){ 
     test.assert(...); 
    }); 
    }).run(function(){ 
     test.done(); 
    }); 
}); 
+0

몇 가지 테스트의 경우 대런의 제안보다 나쁘지 만 CasperJS를 기반으로 웹 사이트를 테스트 할 때 프레임 워크를 빌드하면이 방법이 더 깨끗합니다. –

4

이것은 일반적으로 단위 테스트를 할 때 원하는 것입니다. 어쨌든 실패 할 경우 신속하게 수행하십시오. 나는. 각 테스트 기능의 첫 번째 문제에서 실패합니다. 또한 나중의 테스트는 일반적으로 이전 테스트가 통과되었다고 가정합니다. 페이지 제목이 잘못되어 404라고 말하면 올바른 숫자의 이미지가 페이지에 있는지 테스트 할 필요가 없습니다.

var title = this.getTitle(); 
var linkText = this.getHTML('a#testLink'); 
this.assert(title == "MyPage" && linkText == "continue", 
    "title=" + title + ";a#testLink = " + linkText); 

그러나 :

난 당신이 더 많은 테스트 결과 정보, 단일 어설 및 사용자 지정 오류 메시지를 사용하는 것이 그 한 가지 방법을 얻을 수 있도록 당신이 원하는 추측하고있다 지저분해질 수 있습니다.

test.assert(false, null, {doThrow:false}); 
test.assertEquals(1 == 2, null, {doThrow:false}); 
test.assertEquals(2 == 2); 

을 그리고 당신이 원하는 경우에이은을로 : 당신이 기능의 assert 가족의 모든 힘을 사용, 그리고 그들이 던져 가지고 있지만, 대신 계속하려면, the source code의 연구는이 작업을 할 수 있음을 보여줍니다 모든 주장에 대해 기본 동작을 사용하므로 코드를 해킹하는 것이 최선의 선택 일 수 있습니다! (기본값 truedoThrow으로, false으로 변경하십시오.)

+0

방금 ​​다른 해결책을 찾았습니다. =) 나는 이것을 쓰고 있습니다. – user2137454

+0

예, 좋은 방법입니다. –