私は単純なコントローラを持っています。まず、スコープに値を代入する必要があります。
function TestCtrl($scope, $http) {
$scope.listForms = 'some list';
}
コントローラについては、次のテストが期待通りに動作します:
describe('Testing a controller', function() {
var ctrl, scope, httpMock;
beforeEach(inject(function($injector) {
scope = $injector.get('$rootScope').$new();
ctrl = $injector.get('$controller');
ctrl(TestCtrl, { $scope: scope });
}));
it("assigns to scope", function() {
expect(scope.listForms).toMatch("some list");
});
});
をしかし、私は私のAPI
function TestCtrl($scope, $http) {
$http.get('/api/listForms').success(function(list) {
$scope.aListOfForms = 'some list';
});
}
と
への試験変更からリストを取得する機能を変更したときdescribe('Testing a controller', function() {
var ctrl, scope, httpMock;
beforeEach(inject(function($injector) {
httpMock = $injector.get('$httpBackend');
scope = $injector.get('$rootScope').$new();
httpMock.when('GET', '/tactical/api/listOrderForms').respond("an order form");
ctrl = $injector.get('$controller');
ctrl(TestCtrl, {
$scope: scope,
$http: httpMock
});
}));
it("gets the list from the api and assigns it to scope", function() {
httpMock.expectGET('tactical/api/listOrderForms');
expect(scope.orderFormList).toMatch("an order form");
httpMock.flush();
});
});
geg次のエラー:
TypeError: 'undefined' is not a function
Expected undefined to match 'an order form'.
Error: No pending request to flush !
私が間違っていることを知っている人はいますか?前もって感謝します。
ありがとうそれは本当に助けになりました、私は愚かです。 –
しかし、$ httpBackendの実際の実装は変更されていません。だから、Angularは実際の$ httpBackendオブジェクトにあるメソッド(何でも)を呼び出さないで、$ http.get()が呼び出されたときにhttpMockを呼び出す方法を知っていますか?私はここでひどく混乱しています。(Angularに新しくなりました) – Nikhil
Nikhil、$ httpは$ httpが初期化されると$ httpBackendを要求します。 $ httpBackendはシングルトン(インスタンスは1つしか存在しません)であり、httpMockはそのインスタンスへの参照です。テストと$ httpの間で共有されるこの$ httpBackendインスタンスでコールバックを登録して何かをすることが、この作業をするためのものです。 –