我爲我的AngularJS應用程序創建了一個指令,該指令檢查$ scope是否存在配置文件映像。如果它是通過追加一個新的DIV來顯示圖像的指令,如果不是,則通過css類顯示默認值。該指令看起來像這樣...它在應用程序中起作用。
.directive('profileImage',function() {
return {
restrict: 'A',
scope: {
profileImage: '='
},
link: function(scope, element) {
if(!scope.profileImage) {
element.addClass('icon-default-profile-image defaultProfileImage');
} else {
element.append('<img ng-src="profileImage" class="profileImage">');
}
}
};
})
;
現在我想爲此編寫單元測試(我知道我應該這樣做第一,但我只是學習測試)。我寫了下面的:
it('should display a specific image', inject(function($rootScope, $compile) {
//$rootScope.profileImage = "srcOfImage";
$scope = $rootScope;
$scope.profileImage = "srcOfImage";
var element = angular.element('<div profile-image="profileImage"></div>')
element = $compile(element)($scope)
console.log(element);
var imgElem = element.find('img');
expect(imgElem.length).toBe(1);
expect(imgElem.eq(0).attr('src')).toBe('srcOfImage');
}));
現在測試在這種情況下失敗(其它測試在沒有$ scope.profileImage可已通過)。當我走出把我所創建的元素,我得到以下幾點:
LOG: {0: <div profile-image="profileImage" class="ng-scope ng-isolate-scope"><img ng-src="profileImage" class="profileImage"></div>, length: 1}
所以一切正常,但在var element = angular.element('<div profile-image="profileImage"></div>')
的profile-image="profileImage"
被當作一個字符串。它沒有顯示價值'srcOfImage'
。我究竟做錯了什麼?
錯誤看起來像這樣:
PhantomJS 1.9.2 (Mac OS X) Profile Image Directive should display a specific image FAILED
-src="prExpected undefined to be 'srcOfImage'.>, length: 1}
非常感謝您的任何建議/幫助/解釋
您好,感謝您的建議,但我仍然沒有把事情做好,我已經改變了以下代碼,我仍然得到同樣的錯誤? 'var element = angular.element('
'); element = $ compile(element)($ scope); //element.append(''); element = $ compile(element.contents())($ scope);' –只是添加到上面 - 元素仍然不能編譯 –
@Mike Sav:你在指令裏面加了嗎?檢查我更新的答案 –