2017-12-31 79 views
0

私はジャスミンスパイで単体テストケースを作成しようとしています。以下は私のサービスコードです。以下はジャスミンスパイ:returnValueでエラーを取得する

function reset(someParam) { 
var deferred = $q.defer(); 

svcTypes.getTasksWithRoles().then(function (types) { 
    if (types.HadError) return; 

    // do some stuff..    

    deferred.resolve(results); 
}, function (errorResponse) { 
    deferred.reject(errorResponse); 
}); 
return deferred.promise; } 

私のユニットテストケースである:

以下
describe('tests for svcWorkordertypes', function() { 

beforeEach(angular.mock.module('workorders.service')); 
beforeEach(angular.mock.module('workordertypes.service')); 


var svcWorkordertypes; 
var svcTypes; 
var $q, $httpBackend; 
beforeEach(angular.mock.inject(function (_svcWorkordertypes_, _svcTypes_, _$q_, _$httpBackend_) { 
    svcWorkordertypes = _svcWorkordertypes_; 
    svcTypes = _svcTypes_; 
    $q = _$q_; 
    $httpBackend = _$httpBackend_; 

})); 

//This is working fine. 
it('all controls should be set', function() {    
    expect(svcWorkordertypes).toBeDefined(); 
    expect(svcTypes).toBeDefined(); 
    expect($q).toBeDefined(); 
    expect($httpBackend).toBeDefined(); 

}); 

it('test reset method', function() { 
    //Arrange 
    var someParam = 'test'; 
    var types = [{ RoleList: 'newRoleList', isHeader: true, Roles: 'testRole' }]; 
    $httpBackend.when("GET", 'null/tasks/types?$select=IncludeRoles').respond(200, JSON.stringify(types)); 
    spyOn(svcTypes, 'getTasksWithRoles').and.returnValue(function() { 
     var deferred = $q.defer(); 
     deferred.resolve(JSON.stringify(types)); 
     return deferred.promise; 
    }); 

    //Act 
    var result = svcWorkordertypes.reset(selectedRoleName); 


    //Assert 
    result.then(function (res) { 
     console.log(res + ' res output...'); 
     //expect(JSON.stringify(res)).toEqual(JSON.stringify(types)); 
    }); 
    //expect(svcTypes).toBeDefined(); 
}) }); 

は誤りです:

enter image description here

私もcallFakeとの多くの方法を試してみました。私はstackoverflowで同様の質問を見つけましたが、それは私を助けませんでした。

答えて

1

getTasksWithRolesは約束を返すべきであり、約束を返す関数を返すように嘲笑されます。

それは次のようになります。

spyOn(svcTypes, 'getTasksWithRoles').and.returnValue(
    $q.resolve(JSON.stringify(types)) 
); 
+0

あなたが返事をestusありがとうございました。今、私はそのエラーを取得していません。しかし、それはまだ約束のゼロオブジェクトを返しています。デバッガは「// do some stuff」コードに入っていません。最初のデバッガは "svcTypes.getTasksWithRoles()"に行き、その後に文の最後、つまりreturn deferred.promise;の最後に移動します。 – KiddoDeveloper

関連する問題