2015-09-01 42 views
2

我正在爲Post調用編寫單元測試,我在測試套件中有假數據,我發佈到端點,但它給了我一個我附加到這個問題的錯誤。我是新來的茉莉花任何想法實施這個測試案例更好的方式將不勝感激。如何使用Jasmine和AngularJS編寫測試?

到目前爲止已經試過代碼..

main.spec.js

describe('processFactory', function(){ 
    'use strict'; 

    var $httpBackend,Process; 
    beforeEach(module('riskAssessmentApp')); 

    beforeEach(inject(function(_$httpBackend_ , processFactory) { 
     $httpBackend = _$httpBackend_; 
     Process = processFactory; 

    })); 
    // make sure no expectations were missed in your tests. 
    afterEach(function() { 
     // $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 

    it('should be able to save process to the database',function(){ 
    var epcfData = [{"type":"Epcf","id":2102}]; 
    var erhData = [{"type":"Erh", "id":20001}]; 
    var geoData =[{"type":"geoLocation", "id": 67000}]; 
    var legalData = [{"type":"legal", "id":3358}]; 
    var prcsObj = { 
     processLongName: "Process unit test 01", 
     processStatementText: "Process statement test 01", 
     epcfUtilKeyList: epcfData, 
     epcfDescription: "Epcf selected key description test 01", 
     businessSegmentOrControlFunction: "business segment test 01", 
     erhUtilKeyList: erhData, 
     geoLocationsKeyList: geoData, 
     legalEntitiesKeyList: legalData, 
     processOwnerWorkerKey: -1069, 
     prcsOwner: "xyz" 
    }; 

     var promise = Process.saveProcess(); 
     httpBackend = expectPOST('app/prcs/rest/process',prcsObj).respond(200,'success'); 

     httpBackend.flush(); 
     promise.then(function(res){ 
     expect(res.data).toBe('success'); 
     }); 

    }); 

}); 

mainFactory.js

var serializeProcess = function (process) { 
      var objToReturn = { 
       processLongName: process.processLongName, 
       processStatementText: process.processStatementText, 
       epcfKey: process.epcfUtilKeyList[0].id, 
       epcfDescription: process.epcfDescription, 
       businessSegmentOrControlFunction: process.businessSegmentOrControlFunction, 
       erhKey: process.erhUtilKeyList[0].id, 
       geographicLocationKeyList: [], 
       legalEntityKeyList: [], 
       processOwnerWorkerKey: process.processOwnerWorkerKey, 
       prcsOwner: process.prcsOwner 

      }; 

saveProcess: function(process, id){ 
       var request = serializeProcess(process); 
       console.log('request payload', JSON.stringify(request)); 
       console.log('ID :: ', id); 
       // do this if you have differnet end point for save and update 
       //var endpoint = (id) ? 'app/prcs/rest/process/' + id : 'app/prcs/rest/process'; 
       var endpoint = 'app/prcs/rest/process'; 
       return $http.post(endpoint, request); 
      } 

錯誤

現在我得到不同的錯誤,請參閱更新的錯誤找不到變量:expectPost

LOG: 'request payload', '{"processLongName":"Process unit test 01","processStatementText":"Process statement test 01","epcfKey":2102,"epcfDescription":"Epcf selected key description test 01","busines 
    SegmentOrControlFunction":"business segment test 01","erhKey":20001,"geographicLocationKeyList":[67000],"legalEntityKeyList":[3358],"processOwnerWorkerKey":-1069,"prcsOwner":"xyz"}' 
    LOG: 'ID :: ', undefined 
PhantomJS 1.9.8 (Windows 7) processFactory should be able to save process to the database FAILED 
     ReferenceError: Can't find variable: expectPOST 
      at C:/Users/spec/process/processFactory.spec.js:37 
PhantomJS 1.9.8 (Windows 7): Executed 2 of 2 (1 FAILED) (0.015 secs/0.023 secs) 
Warning: Task "karma:coverage" failed. Use --force to continue. 

回答

1

你看上去不及格prcsObjidsaveProcess()方法在測試和你沒有建立你的對象的方式,方法的期望。例如,您在prcsObj中缺少epcfUtilKeyList陣列。

應該是這個樣子:

it('should be able to save process to the database',function(){ 
    var epcfData = [{"type":"Epcf","id":2102}] 
    var prcsObj = { 
     processLongName: "Process unit test 01", 
     processStatementText: "Process statement test 01", 
     epcfUtilKeyList: epcfData, 
     epcfDescription: "Epcf selected key description test 01", 
     businessSegmentOrControlFunction: "business segment test 01", 
     erhUtilKeyList: [{ "id": 20001}], 
     processOwnerWorkerKey: 1254, 
     prcsOwner: "xyz" 
    }; 

    var promise = Process.saveProcess(prcsObj); 
    $httpBackend.expectPOST('app/prcs/rest/process',prcsObj).respond(200,'success'); 

    $httpBackend.flush(); 
    promise.then(function(res){ 
    expect(res.data).toBe('success'); 
    }); 

}); 

您仍有可能丟失的信息,但基於您發佈這應該工作的方法。

+0

不應該有任何id權,因爲進程正在保存第一次。 – aftab

+0

現在我得到了不同的錯誤我更新錯誤的問題其下拉,我認爲我必須創建虛擬數據傳遞到測試..我不知道如何將下拉鍵傳遞到工廠。任何想法 – aftab

+0

在你的問題中,我仍然沒有看到你傳遞你的'prcsObj',但我認爲你是。在這種情況下'prcsObj'沒有屬性'epcfUtilKeyLi'。你沒有在你的測試中定義它。錯誤是告訴你什麼是錯的。未定義'epcfUtilKeyLi'。 – RodgerTheGreat

相關問題