Bladeren bron

Wrap container components in render protection

bubble
Kyle Shockey 6 jaren geleden
bovenliggende
commit
44bd85a5bb
2 gewijzigde bestanden met toevoegingen van 111 en 1 verwijderingen
  1. +1
    -1
      src/core/plugins/view/root-injects.js
  2. +110
    -0
      test/core/system/system.js

+ 1
- 1
src/core/plugins/view/root-injects.js Bestand weergeven

@@ -120,5 +120,5 @@ export const getComponent = (getSystem, getStore, getComponents, componentName,
return makeContainer(getSystem, component, getStore())

// container == truthy
return makeContainer(getSystem, component)
return makeContainer(getSystem, wrapRender(component))
}

+ 110
- 0
test/core/system/system.js Bestand weergeven

@@ -571,6 +571,116 @@ describe("bound system", function(){
// Then
expect(renderedComponent.text()).toEqual("This came from mapStateToProps and this came from the system and this came from my own props")
})

it("should catch errors thrown inside of React Component Class render methods", function() {
// Given
// eslint-disable-next-line react/require-render-return
class BrokenComponent extends React.Component {
render() {
throw new Error("This component is broken")
}
}
const system = new System({
plugins: [
ViewPlugin,
{
components: {
BrokenComponent
}
}
]
})

// When
var Component = system.getSystem().getComponent("BrokenComponent")
const renderedComponent = render(<Component />)

// Then
expect(renderedComponent.text()).toEqual("😱 Could not render BrokenComponent, see the console.")
})

it("should catch errors thrown inside of pure component render methods", function() {
// Given
// eslint-disable-next-line react/require-render-return
class BrokenComponent extends PureComponent {
render() {
throw new Error("This component is broken")
}
}

const system = new System({
plugins: [
ViewPlugin,
{
components: {
BrokenComponent
}
}
]
})

// When
var Component = system.getSystem().getComponent("BrokenComponent")
const renderedComponent = render(<Component />)

// Then
expect(renderedComponent.text()).toEqual("😱 Could not render BrokenComponent, see the console.")
})

it("should catch errors thrown inside of stateless component functions", function() {
// Given
// eslint-disable-next-line react/require-render-return
let BrokenComponent = function BrokenComponent() { throw new Error("This component is broken") }
const system = new System({
plugins: [
ViewPlugin,
{
components: {
BrokenComponent
}
}
]
})

// When
var Component = system.getSystem().getComponent("BrokenComponent")
const renderedComponent = render(<Component />)

// Then
expect(renderedComponent.text().startsWith("😱 Could not render")).toEqual(true)
})

it("should catch errors thrown inside of container components", function() {
// Given
// eslint-disable-next-line react/require-render-return
class BrokenComponent extends React.Component {
render() {
throw new Error("This component is broken")
}
}

const system = new System({
plugins: [
ViewPlugin,
{
components: {
BrokenComponent
}
}
]
})

// When
var Component = system.getSystem().getComponent("BrokenComponent", true)
const renderedComponent = render(
<Provider store={system.getStore()}>
<Component />
</Provider>
)

// Then
expect(renderedComponent.text()).toEqual("😱 Could not render BrokenComponent, see the console.")
})
})

})

Laden…
Annuleren
Opslaan