2014-11-04 186 views
0

我有點搞砸角/茉莉花/承諾/嘲笑測試。角/茉莉花/承諾/嘲諷測試

我有一段代碼:

factory.login = function(user, pwd) { 
    AuthenticationResource.login({}, {"username" : user, "password" : pwd}, 
     factory.onLoginSuccess, 
     factory.onLoginFailure 
    ); 
}; 

然後我試圖寫一個測試:

it('login', function() { 

     // give 
     // 1. make 'authenticationResource.login' return a promise that will be successfully resolved 
     var deferred = $q.defer(); 
     var promise = defered.promise; 

     authenticationResource.login = function() { 
      //deferred.resolve(loginResponse); 
      return deferred.promise; 
     }; 

     // 2. call 'factory.login' and make sure that 'onLoginSuccess' function was invoked as expected 

     // then 
     //expect(.. 
    }); 

你能指點我到正確的方向。似乎所有的東西看起來都與我對Java/Mockito有所不同。

然後AuthenticationResource本身是在這裏:

angular.module('main.resources').factory('AuthenticationResource', ['$resource', function ($resource) { 
    return $resource('/rest/authenticate/:path', 
     {path: "@path"}, //parameters default 
     { 
      login: { method: "POST", params: { path: "login" } }, 
      logout: { method: "POST", params: { path: "logout" } } 
     }); 
}]); 
+0

可能重複(http://stackoverflow.com/questions/22830391/unit- testing-in-angularjs-mocking-services-and-promises) – ses 2014-11-05 16:56:03

回答

1

檢查我的答案here

懲戒承諾很難,直到你看到光明!

1

老問題,我知道,但如果有人絆倒它 - 我寫了jasmine-promise-matchers來解決這個問題。

有了它,你可以簡單地測試的承諾,如:

expect(promise).toBeRejected(); 
expect(promise).toBeRejectedWith('expected error message'); 
expect(promise).toBeResolved(); 
expect(promise).toBeResolvedWith('expected result data'); 
[在AngularJS單元測試 - 嘲諷服務和承諾]的
+0

我原計劃使用它。 – ses 2015-03-14 17:52:52

+0

很高興聽到。 :)讓我知道它是否缺乏你想要的任何功能。 – brianvaughn 2015-03-14 18:37:54