问问题
2656 次
1 回答
5
我发现您的测试代码存在三个问题:
- 您没有调用
$httpBackend.flush
,因此没有模拟 HTTP 响应; - 您没有触发摘要循环,因此 Angular 不会呈现您的指令的标记。
- 你试图计算有多少
select
被渲染,但它总是只有一个。您应该计算生成了多少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 回答