私はジャスミンで私のアプリをテストしようとして、次の問題があります:
私は約束のthen
の関数を計算します。それが私のコードをテストする必要があるポイントです。ここで ジャスミンテストpromise.then関数
TestCtrl.$inject = ["$scope", "TestService"];
/* ngInject */
function TestCtrl($scope, TestService) {
$scope.loadData = function() {
TestService.getData().then(function (response) {
$scope.data = response.data;
$scope.filtered = $scope.data.filter(function(item){
if(item.id > 1000){
return true;
}
return false;
})
});
}
}
そして、私のジャスミンのテストコード:
describe('TestService tests', function() {
var $q;
beforeEach(function() {
module('pilot.fw.user');
});
beforeEach(inject(function (_$q_) {
$q = _$q_;
}));
describe('UserController Tests', function() {
beforeEach(inject(function (_$httpBackend_, $rootScope, $controller) {
this.scope = $rootScope.$new();
this.$rootscope = $rootScope;
this.$httpBackend = _$httpBackend_;
this.scope = $rootScope.$new();
var TestServiceMock = {
getData: function() {
var deferred = $q.defer();
var result = [{
"id": 1720,
"user": 1132
},
{
"id": 720,
"user": 132
}, {
"id": 1721,
"user": 1132
}];
deferred.promise.data = result;
deferred.resolve(result);
return deferred.promise;
}
};
this.controller = $controller('TestCtrl', {
'$scope': this.scope,
'TestService': TestServiceMock
});
}));
it('test', function(){
this.scope.loadData();
expect(true).toBeTruthy();
})
});
});
私は理解していない奇妙なことは、(コンソールログでテストされる):
- 私の約束が作成され返されました
- 私のloadData fu nctionは私が解決
としての約束を返すものの、その後、関数内すべてが、どのように私は、内のコードをテストすることができ、実行されることはありませんと呼ばれ、それがTestService
it('Should be async', function(done) {
someAsyncFunction().then(function(result) {
expect(result).toBe(true);
done();
});
});
非同期テストのために呼び出すことができます行わパラメータを取る助け
それ( 'テスト'、関数(行う){ TestServiceMock.getData()を(関数(結果){ にconsole.log(結果); }); )((真).toBeTruthyを期待。 )(完了; }) 私はこのようにそれを試してみましたが、私のコンソールは以前とさえ呼ばれる... 同じ問題isn'tログ:/ - 編集が終わっを呼んでいる –
あなたの助けを タンク - CodeStyleのため申し訳ありませんが「その時」の外側に! 「完了」がメソッドの中にあることを確認してください:) –
それ以外の場合は、約束が解決される前に実行しています。私の例では、約束の結果をexpectメソッドに渡す方法に注目してください。これは、 'then'の内部にある解決されたときにのみ機能します –