2014-07-12 5 views
1

이것은 내가 노출 한 컨트롤러 코드의 내 함수입니다. 여기 단위 테스트 void 메서드 - Jasmine, javascript

//unit test code 
    $.getMessagesUnit = function(chatId) { 

     if (!(Titanium.Network.networkType === Titanium.Network.NETWORK_NONE)) { 

      apiHelper.APIGetRequest(xxxxxxxx + '/messages/' + args.chatId, function(e) { 
       $.view_indicator.visible = true; 
       var status = this.status; 
       if (status == 200) { 

        console.log('get chats'); 

        var data = JSON.parse(this.responseText); 
        console.log(data); 

        var rows = []; 
        var i = 0; 
        var blob; 

        for (x in data.messages) { 
         //Ti.API.debug(JSON.stringify(messages[x])); 

         var nickname = null; 
         var chatBlob = null; 
         var picture = null; 
         var timeStampCon = null; 

         chatBlob = data.messages[x].message; 
         nickname = data.messages[x].user.nickname; 
         picture = data.messages[x].user.pictures[0]; 

         //alert(data.messages[x].message); 

         timeStampCon = utilities.getCurrentTimeFromStamp(data.messages[x].timestamp); 
         textArea.addLabel(timeStampCon); 

         //alert(data.messages[x].user.id); 

         if (args.pickedId == data.messages[x].user.id) { 

          textArea.recieveMessage(chatBlob); 
          textArea.addLabel("\n"); 

         } else { 

          textArea.sendMessage(chatBlob); 
          textArea.addLabel("\n"); 

         } 

        } 

        //return rows; 
        //end 
        $.view_indicator.visible = false; 

       } 


      }, function(err) { 

       alert('Unknown error from api'); 
       $.view_indicator.visible = false; 
      }); 

     } else { 
      alert('No internet connection found'); 
      $.view_indicator.visible = false; 
     } 

    }; 

    //end 

내 단위 테스트 코드입니다 :

it('test chat window function.', function() { 
    $ = Alloy.createController('chatWindow', {}); 
    expect($.getMessagesUnit(123).chatBlob). toBeDefined(); 
}); 

API 호출을 한 후 나는의 JSON 요청에 변수가 정의 된 경우 테스트 할 :

var nickname = null; 
var chatBlob = null; 
var picture = null; 
var timeStampCon = null; 

에 단위 테스트에서 얻은 데이터가 정의되어 있는지 확인하십시오. 다음과 같은 오류가 발생합니다 :

[INFO] : . ============================================================ 
[ERROR] : . THERE WERE FAILURES! 
[ERROR] : . ============================================================ 
[ERROR] : . Recap of failing specs: 
[ERROR] : . ------------------------------------------------------------ 
[ERROR] : . chatWindow controller test chat window function.. - Expected undefined to be defined. 

단위 테스트가 처음인데 어떻게하면 void 메소드에서 개별 변수를 테스트 할 수 있습니까?

건배들

업데이트 - 사용 스파이 :

it('test spies in receive message function.', function() { 
    $ = Alloy.createController('chatWindow', {}); 
    spyOn($, 'textarea.recieveMessage'); 
    $.getMessagesUnit(123); 
    expect(textarea.recieveMessage).toHaveBeenCalled(); 
}); 

[INFO] : . - test spies in receive message function.. (FAILED) 
[INFO] : . - - Expected spy recieveMessage to have been called. 

답변

0

당신은 당신의 성공 기능에 의해 생성 된 폐쇄 내 유일한 접근로 chatBlob에 액세스 할 수 없습니다. 당신이 할 수있는 일은 으로 전화하기 전에 textArea 개체의 recieveMessage 함수에 스파이를 추가 한 다음 수신 된 호출에 대한 스파이와 해당 호출 이전의 args, 즉 chatBlob 값을 확인하는 것입니다.

+0

어떻게하면 좋을까요? 나는 재스민에 아주 새롭다, 그리고 그것은 나를 미치게했다! – user3754111

+0

스파이를위한 코드가있는 OP가 수정되어 작동하지 못했습니다. 건배 – user3754111

+0

spyOn 함수의 두 번째 매개 변수는 감시 할 함수의 이름이어야합니다. 따라서 'spyOn ($. textArea,'recieveMessage ');는 원하는 것입니다 (textArea는 $ 객체의 속성이라고 가정합니다. –

관련 문제