ジャスミンとangularJSでコードをテストする方法を理解しようとしています。私はコントローラと注入されたサービスを備えたテストプロジェクトを書いた。今私はコントローラをテストし、注入されたサービスを模擬しようとします。しかし、私はコントローラから "到着"機能をテストする方法を見つけられませんでした。ここに私のjsfiddleです:http://jsfiddle.net/2fwxS/ジャスミンでangularJSを注入したコントローラをテストする
controller.js:
angular.module('myApp.controllers', [])
.controller('MyCtrl', ['$scope', 'MyService', function ($scope, MyService) {
$scope.User = {};
$scope.HasUserArrived = false;
$scope.Arrived = function(firstname, lastname) {
$scope.HasUserArrived = MyService.Arrive(firstname, lastname);
return $scope.HasUserArrived;
}
}]);
services.js:
var myApp = angular.module('myApp.services', []).
value('version', '0.1');
myApp.factory('MyService', [function() {
return {
HasArrived: false,
Arrive: function (firstname, lastname) {
this.HasArrived = false;
if (firstname && lastname) {
this.HasArrived = true;
}
console.log("User has arrived: " + this.HasArrived);
return this.HasArrived;
}
}
}]);
私は$提供し、いくつかの同様の説明があることができました正しい解決策(How can I write jasmine test for angular controller and service like this?)またはcreateSpy (How do you mock Angular service that is a function?)、$ provider.factoryまたは$ provider.valueが必要なとき、またはcreateSpyをいつ使うべきかを理解できませんでしたか?誰かが違いを理解するために私を助け、私のjsFiddle(http://jsfiddle.net/2fwxS/)の例稼働中の非アクティブ化コードを取得することができれば、私は感謝
...
ご返信いただきまして申し訳ありません! @Michael答えと修正されたjsFiddleをありがとう。それらの少しの変更で、私は正常にテストを実行することができました! 実際、工場がなぜ機能しないのかを知ることはいいでしょう。 – burgerS
私の同僚と私は、サービスを嘲笑するのではなく、この例の中でサービスをテストする方法があれば興味があります。サービスを個別にテストする必要があることはわかっていますが、この例の中のサービスをテストすることが可能かどうかは疑問でした... – burgerS
サービスが非常に簡単であれば、コントローラをテストするためにサービスを試してみることができますその動作を安全に予測し、サービス実装のエラーのためコントローラテストを破る可能性を最小限に抑えます。しかし、そうしたら、サービスではなくコントローラをテストすることになります。あなたはそれが想定どおりに動作するように、サービスを別々にテストする必要があります。 –