diff --git a/test/runtime/samples/transition-js-each-else-block-intro-outro/_config.js b/test/runtime/samples/transition-js-each-else-block-intro-outro/_config.js
new file mode 100644
index 0000000000..e358808628
--- /dev/null
+++ b/test/runtime/samples/transition-js-each-else-block-intro-outro/_config.js
@@ -0,0 +1,54 @@
+export default {
+ props: {
+ things: ['a', 'b', 'c']
+ },
+
+ test({ assert, component, target, window, raf }) {
+ component.things = [];
+ let div = target.querySelector('div');
+ assert.equal(div.foo, 0);
+
+ raf.tick(200);
+ assert.equal(div.foo, 0.5);
+
+ raf.tick(300);
+ assert.equal(div.foo, 0.75);
+
+ raf.tick(400);
+ assert.equal(div.foo, 1);
+
+ raf.tick(600);
+ component.things = ['a', 'b', 'c'];
+
+ raf.tick(700);
+ assert.equal(div.foo, 1);
+ assert.equal(div.bar, 0.75);
+
+ raf.tick(800);
+ assert.equal(div.foo, 1);
+ assert.equal(div.bar, 0.5);
+
+ raf.tick(900);
+ assert.equal(div.foo, 1);
+ assert.equal(div.bar, 0.25);
+
+ // test outro before intro complete
+ raf.tick(1000);
+ component.things = [];
+ div = target.querySelector('div');
+
+ raf.tick(1200);
+ assert.equal(div.foo, 0.5);
+
+ component.things = ['a', 'b', 'c'];
+ raf.tick(1300);
+ assert.equal(div.foo, 0.75);
+ assert.equal(div.bar, 0.75);
+
+ raf.tick(1400);
+ assert.equal(div.foo, 1);
+ assert.equal(div.bar, 0.5);
+
+ raf.tick(2000);
+ }
+};
\ No newline at end of file
diff --git a/test/runtime/samples/transition-js-each-else-block-intro-outro/main.svelte b/test/runtime/samples/transition-js-each-else-block-intro-outro/main.svelte
new file mode 100644
index 0000000000..c97a916a04
--- /dev/null
+++ b/test/runtime/samples/transition-js-each-else-block-intro-outro/main.svelte
@@ -0,0 +1,27 @@
+
+
+{#each things as thing}
+
{thing}
+ {:else}
+ else
+{/each}
\ No newline at end of file
diff --git a/test/runtime/samples/transition-js-each-else-block-intro/_config.js b/test/runtime/samples/transition-js-each-else-block-intro/_config.js
new file mode 100644
index 0000000000..4840bb09da
--- /dev/null
+++ b/test/runtime/samples/transition-js-each-else-block-intro/_config.js
@@ -0,0 +1,22 @@
+export default {
+ props: {
+ things: ['a', 'b', 'c']
+ },
+
+ test({ assert, component, target, window, raf }) {
+ component.things = [];
+ const div = target.querySelector('div');
+ assert.equal(div.foo, 0);
+
+ raf.tick(200);
+ assert.equal(div.foo, 0.5);
+
+ raf.tick(300);
+ assert.equal(div.foo, 0.75);
+
+ raf.tick(400);
+ assert.equal(div.foo, 1);
+
+ raf.tick(500);
+ }
+};
\ No newline at end of file
diff --git a/test/runtime/samples/transition-js-each-else-block-intro/main.svelte b/test/runtime/samples/transition-js-each-else-block-intro/main.svelte
new file mode 100644
index 0000000000..eb3d4ad0d7
--- /dev/null
+++ b/test/runtime/samples/transition-js-each-else-block-intro/main.svelte
@@ -0,0 +1,18 @@
+
+
+{#each things as thing}
+ {thing}
+ {:else}
+ else
+{/each}
\ No newline at end of file
diff --git a/test/runtime/samples/transition-js-each-else-block-outro/_config.js b/test/runtime/samples/transition-js-each-else-block-outro/_config.js
new file mode 100644
index 0000000000..11b1b387c0
--- /dev/null
+++ b/test/runtime/samples/transition-js-each-else-block-outro/_config.js
@@ -0,0 +1,20 @@
+export default {
+ props: {
+ things: []
+ },
+ test({ assert, component, target, window, raf }) {
+ const div = target.querySelector('div');
+ component.things = ['a', 'b', 'c'];
+
+ raf.tick(200);
+ assert.equal(div.foo, 0.5);
+
+ raf.tick(300);
+ assert.equal(div.foo, 0.25);
+
+ raf.tick(400);
+ assert.equal(div.foo, 0);
+
+ raf.tick(500);
+ }
+};
\ No newline at end of file
diff --git a/test/runtime/samples/transition-js-each-else-block-outro/main.svelte b/test/runtime/samples/transition-js-each-else-block-outro/main.svelte
new file mode 100644
index 0000000000..72e91bb016
--- /dev/null
+++ b/test/runtime/samples/transition-js-each-else-block-outro/main.svelte
@@ -0,0 +1,18 @@
+
+
+{#each things as thing}
+ {thing}
+{:else}
+ else
+{/each}
\ No newline at end of file