2656 次
1 に答える
5
あなたのテスト コードには 3 つの問題があります。
- を呼び出していない
$httpBackend.flush
ため、HTTP 応答をシミュレートしていません。 - ダイジェスト サイクルをトリガーしていないため、Angular はディレクティブのマークアップをレンダリングしていません。
select
レンダリングされている数を数えようとしていますが、常に1つだけです。option
代わりに生成される数を数えるべきです。
それらはすべて簡単に解決できます(何が起こっているのかを明確にするためにコードを少し変更しました):
describe('directive', function() {
var $httpBackend;
beforeEach(function() {
module('myApp.directives');
inject(function(_$httpBackend_, $rootScope, $controller) {
$httpBackend = _$httpBackend_;
});
});
it('should load select\'s options from xhr on render', function() {
inject(function($compile, $rootScope) {
// Arrange
$httpBackend.expectPOST('url').respond(["Item 1", "Item 2"]);
var element = $compile('<dimension ng-model="inputs.model" url="url">Dimension</dimension>')($rootScope);
// Act
$httpBackend.flush(); // Simulates a response
$rootScope.$digest(); // Triggers a digest cycle
// Assert
expect(element.find('option').length).toBe(2);
});
});
});
上記のテストが機能するPlunkerスクリプトを次に示します。
于 2013-08-20T05:28:26.280 に答える