Skip to content

Commit

Permalink
fix: transition error handler instance value
Browse files Browse the repository at this point in the history
  • Loading branch information
cxtom committed Aug 6, 2021
1 parent a3cb5cd commit 4c9d6a9
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/view/element-own-attached.js
Expand Up @@ -221,7 +221,7 @@ function elementOwnAttached() {
transition.enter(this.el, empty);
}
catch (e) {
errorHandler(e, owner, 'transition enter');
errorHandler(e, isComponent ? owner.parentComponent : owner, 'transition enter');
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/view/element-own-detach.js
Expand Up @@ -40,7 +40,7 @@ function elementOwnDetach() {
}
catch (e) {
var isComponent = this.nodeType === NodeType.CMPT;
var owner = isComponent ? this : this.owner;
var owner = isComponent ? this.parentComponent : this.owner;
errorHandler(e, owner, 'transition leave');
}
}
Expand Down
110 changes: 107 additions & 3 deletions test/error.spec.js
Expand Up @@ -277,7 +277,7 @@ describe('error', function () {
}
});
var MyComponent = san.defineComponent({
template: '<div><x-child><x-slot-child /></x-child></div>',
template: '<div><x-child></x-child></div>',
components: {
'x-child': Child
},
Expand Down Expand Up @@ -323,7 +323,7 @@ describe('error', function () {
}
});
var MyComponent = san.defineComponent({
template: '<div><x-child><x-slot-child /></x-child></div>',
template: '<div><x-child></x-child></div>',
components: {
'x-child': Child
},
Expand Down Expand Up @@ -369,7 +369,111 @@ describe('error', function () {
}
});
var MyComponent = san.defineComponent({
template: '<div><x-child><x-slot-child /></x-child></div>',
template: '<div><x-child></x-child></div>',
components: {
'x-child': Child
},
error: spy
});

var myComponent = new MyComponent();
var wrap = document.createElement('div');
document.body.appendChild(wrap);
myComponent.attach(wrap);

myComponent.children[0].data.set('num', 0);
san.nextTick(function () {
expect(spy).toHaveBeenCalled();

var args = spy.calls.first().args;
expect(args[2]).toBe('transition leave');
expect(args[1] instanceof Child).toBe(true);
expect(args[0] instanceof Error).toBe(true);
expect(args[0].message).toBe('error');

myComponent.dispose();
document.body.removeChild(wrap);
done();
});
});

it('transition enter component', function (done) {
var spy = jasmine.createSpy();
var subChild = san.defineComponent({
template: '<span></span>'
});
var Child = san.defineComponent({
template: '<h1><sub-child s-if="num > 1" s-transition="transCreator">test</sub-child></h1>',
initData() {
return {
num: 2
};
},
transCreator: function () {
return {
enter: function () {
throw new Error('error');
}
};
},
components: {
'sub-child': subChild
},
});
var MyComponent = san.defineComponent({
template: '<div><x-child></x-child></div>',
components: {
'x-child': Child
},
error: spy
});

var myComponent = new MyComponent();
var wrap = document.createElement('div');
document.body.appendChild(wrap);
myComponent.attach(wrap);

myComponent.children[0].data.set('num', 0);
san.nextTick(function () {
expect(spy).toHaveBeenCalled();

var args = spy.calls.first().args;
expect(args[2]).toBe('transition enter');
expect(args[1] instanceof Child).toBe(true);
expect(args[0] instanceof Error).toBe(true);
expect(args[0].message).toBe('error');

myComponent.dispose();
document.body.removeChild(wrap);
done();
});
});

it('transition leave component', function (done) {
var spy = jasmine.createSpy();
var subChild = san.defineComponent({
template: '<span></span>'
});
var Child = san.defineComponent({
template: '<h1><sub-child s-if="num > 1" s-transition="transCreator">test</sub-child></h1>',
initData() {
return {
num: 2
};
},
transCreator: function () {
return {
leave: function () {
throw new Error('error');
}
};
},
components: {
'sub-child': subChild
},
});
var MyComponent = san.defineComponent({
template: '<div><x-child></x-child></div>',
components: {
'x-child': Child
},
Expand Down

0 comments on commit 4c9d6a9

Please sign in to comment.