2016-03-23 9 views
0

カルマを使用して統合テストを作成しようとしています。私は実際のhttp呼び出しを行い、実際の応答を得る必要があります。私は#1434で述べたすべての解決策をpassthrough()を使って、「$ httpBackend:angular.mock。$ HttpBackendProvider」とコメントしてみました。ここでカルマテストで実際のhttpコールを行うことはできますか?

は私のテストコードです:

use strict'; 

describe('module: main, service: AuthService', function() { 
beforeEach(module('ngMockE2E')); 
// load the service's module 
beforeEach(module('main')); 
// load all the templates to prevent unexpected $http requests from ui-router 
beforeEach(module('ngHtml2Js')); 

// instantiate service 
var AuthService; 
var $q; 
var deferred; 
var $rootScope; 

var response; 

var scope, http, flush, httpBackend; 

beforeEach(inject(function ($httpBackend,AuthService,$q, $rootScope) { 
httpBackend = $httpBackend; 

AuthService = AuthService; 
$q = $q; 
$rootScope = $rootScope; 
deferred = $q.defer(); 

scope = $rootScope.$new(); 
})); 

it('should do something', function() { 
expect(!!AuthService).toBe(true); 
expect(AuthService).not.toBeNull(); 

}); 

it('verify authenticating user', function() { 
AuthService.authUser('[email protected]','abc123').then(function (result) { 
console.log("Result of successful auth user is "); 
console.log(result); 
expect(result).toEqual(true); 
done(); 
}, function (error) { 
console.log("error of failure auth user is ",error); 
expect(false).toBe(true); 
done(); 
}); 
httpBackend.whenPOST('/oauth/token').passThrough(); 
$rootScope.$digest(); 
//httpBackend.flush(); 
}); 

}); 

アンギュラアプリケーションがサーバーからいくつかのデータを必要とする場合、誰かがカルマテスト

+0

テスト中は、我々は我々のテストはすぐに実行したいと我々は実サーバにXHRまたはJSONPリクエストを送信したくないので、外部依存関係を持っていない、あなたのデータに応じて変更します。私たちが本当に必要とするのは、特定のリクエストが送信されたかどうかを確認するか、アプリケーションがリクエストを行い、事前に訓練された応答で応答し、最終結果が期待どおりであることを主張することだけです。 – user1645290

答えて

0

で実際のHTTP呼び出しを行うには、このためのすべてのソリューションを持っている場合、それは素晴らしいことだろう$ httpサービスを呼び出し、$ httpサービスが$ httpBackendサービスを使用して実際のサーバーに要求を送信します。依存性注入を使用すると、$ httpBackend mock($ httpBackendと同じAPIを持つ)を注入して、それを使用して要求を検証し、実際のサーバーに要求を送信せずに何らかのテストデータで応答することができます。

試してみては

it('verify authenticating user', 
function() { 

httpBackend.expect('POST', '/oauth/token') 
    .respond(200, "[{ success : 'true', id : 123 }]"); 

AuthService.authUser('[email protected]', 'abc123') 
    .then(function(data) { 
    expect(data.success).toBeTruthy(); 
}); 

$httpBackend.flush(); 
}); 
関連する問題