diff --git a/test/browser/fragments.test.js b/test/browser/fragments.test.js
index cec7319abb..fdaf6d5be3 100644
--- a/test/browser/fragments.test.js
+++ b/test/browser/fragments.test.js
@@ -84,6 +84,57 @@ describe('Fragment', () => {
]);
});
+ it('should not remove keyed elements', () => {
+ let deleteItem = () => {};
+ const Element = ({ item, deleteItem }) => (
+
+ Item: {item}
+ {''} {/* If you delete this, it works fine. */}
+
+ );
+
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ items: Array(10)
+ .fill()
+ .map((_, i) => i)
+ };
+ }
+
+ render(_props, state) {
+ deleteItem = () => {
+ this.setState({
+ items: this.state.items.filter(i => i !== this.state.items[2])
+ });
+ };
+
+ return state.items.map(item => (
+
+ ));
+ }
+ }
+
+ render(, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '
Item: 0
Item: 1
Item: 2
Item: 3
Item: 4
Item: 5
Item: 6
Item: 7
Item: 8
Item: 9
'
+ );
+
+ clearLog();
+ deleteItem();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ 'Item: 0
Item: 1
Item: 3
Item: 4
Item: 5
Item: 6
Item: 7
Item: 8
Item: 9
'
+ );
+ expectDomLogToBe([
+ 'Item: 2.remove()',
+ '#text.remove()',
+ '#text.remove()'
+ ]);
+ });
+
it('should render multiple children via noop renderer', () => {
render(