10
Mam następujący kod:test imagesLoaded() postęp oddzwaniania przy użyciu jaśmin
$.ajax({
url: API + "item/" + item_id.replace('-',':'),
beforeSend: function(xhr){xhr.setRequestHeader('x-customer', customer);},
format: "json",
success: function(data){
var template_name = data.source + settings.overlay_style;
$('#modal .modal-content').html(Handlebars.templates[template_name](data));
/* Handle missing avatars */
$('#modal-avatar-image').imagesLoaded()
.progress(function(instance, image) {
if (!image.isLoaded) {
image.img.src = "/images/404_avatar.svg";
image.img.alt = "The avatar for this user could not be found. Showing placeholder";
image.img.title = "The avatar for this user could not be found. Showing plac eholder";
}
});
/* Handle missing main content */
$('.modal-img').imagesLoaded()
.progress(function(instance, image) {
if (!image.isLoaded) {
image.img.src = "/images/404_image.svg";
image.img.alt = "This image is lost in space. Could be removed by user or could be lost in a remote tube";
image.img.title = "This image is lost in space. Could be removed by user or could be lost in a remote tube";
}
$('.modal-img').removeClass('loading');
});
});
ja napisałem kilka testów dla tego bloku kodu, ale nie wydaje się uzyskać to wykonać:
var attrs = ['src', 'alt', 'title'];
attrs.forEach(function(attr, idx, arr) {
it('should set default ' + attr + ' for img#modal-avatar-image', function() {
spyOn($, 'ajax').and.callFake(function(e){
e.success({'source': 'twitter'});
});
openModal('test');
expect(val).toBeDefined();
val = $($("#modal-avatar-image")[0]).attr(attr);
if(attr === 'src'){
//expect the src to chnage from the old value
expect(val !== src).toBeTruthy();
}
});
});
attrs.forEach(function(attr, idx, arr) {
it('should set default ' + attr + ' for img.modal-img', function() {
spyOn($, 'ajax').and.callFake(function(e){
e.success({'source': 'twitter'});
});
openModal('test');
val = $($(".modal-img")[0]).attr(attr);
expect(val).toBeDefined();
if(attr === 'src'){
//expect the src to chnage from the old value
expect(val !== src).toBeTruthy();
}
});
});
wyjściowa:
Expected undefined to be defined.
Error: Expected undefined to be defined.
at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:346:41)
Expected false to be truthy.
Error: Expected false to be truthy.
at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:350:53)
Expected undefined to be defined.
Error: Expected undefined to be defined.
at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:346:41)
Expected false to be truthy.
Error: Expected false to be truthy.
at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:365:53)
Expected undefined to be defined.
Error: Expected undefined to be defined.
at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:362:41)
Expected undefined to be defined.
Error: Expected undefined to be defined.
at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:362:41)
W swojej pierwszej pętli forEach uruchamiasz swoje twierdzenie na val, zanim je zdefiniujesz. – Jeff
Czy możesz przedłużyć swój kod, aby pokazać, gdzie deklarujesz 'var val;'? Dodaj także numer początkowy swojej specyfikacji. Czy możesz wyjaśnić, dlaczego 'spodziewasz się()' 'val'' toBeDefined() '** przed ** otrzymanie wartości do niego w pierwszym' ìt() '? Może być celowo lub jednym z twoich błędów. Last but not least: w drugim 'it()' przechowujesz wartość atrybutu na 'val'; jeśli jest nieokreślone, może to być spowodowane tym, że element '# modal-avatar-image' nie został wstawiony do dokumentu (mógł on zostać utworzony, ale nie został wstawiony,' $ ("# modal-avatar-image") 'nie znajdzie to wtedy). –