diff --git a/src/napari_matplotlib/tests/test_histogram.py b/src/napari_matplotlib/tests/test_histogram.py
index 14375887..e836f829 100644
--- a/src/napari_matplotlib/tests/test_histogram.py
+++ b/src/napari_matplotlib/tests/test_histogram.py
@@ -3,10 +3,6 @@
 import pytest
 
 from napari_matplotlib import HistogramWidget
-from napari_matplotlib.tests.helpers import (
-    assert_figures_equal,
-    assert_figures_not_equal,
-)
 
 
 @pytest.mark.mpl_image_compare
@@ -27,26 +23,3 @@ def test_histogram_3D(make_napari_viewer, brain_data):
     # Need to return a copy, as original figure is too eagerley garbage
     # collected by the widget
     return deepcopy(fig)
-
-
-def test_change_layer(make_napari_viewer, brain_data, astronaut_data):
-    viewer = make_napari_viewer()
-    widget = HistogramWidget(viewer)
-
-    viewer.add_image(brain_data[0], **brain_data[1])
-    viewer.add_image(astronaut_data[0], **astronaut_data[1])
-
-    # Select first layer
-    viewer.layers.selection.clear()
-    viewer.layers.selection.add(viewer.layers[0])
-    fig1 = deepcopy(widget.figure)
-
-    # Re-selecting first layer should produce identical plot
-    viewer.layers.selection.clear()
-    viewer.layers.selection.add(viewer.layers[0])
-    assert_figures_equal(widget.figure, fig1)
-
-    # Plotting the second layer should produce a different plot
-    viewer.layers.selection.clear()
-    viewer.layers.selection.add(viewer.layers[1])
-    assert_figures_not_equal(widget.figure, fig1)
diff --git a/src/napari_matplotlib/tests/test_layer_changes.py b/src/napari_matplotlib/tests/test_layer_changes.py
new file mode 100644
index 00000000..1cdf299f
--- /dev/null
+++ b/src/napari_matplotlib/tests/test_layer_changes.py
@@ -0,0 +1,59 @@
+from copy import deepcopy
+from typing import Any, Dict, Tuple, Type
+
+import numpy as np
+import numpy.typing as npt
+import pytest
+from napari.viewer import Viewer
+
+from napari_matplotlib import HistogramWidget, SliceWidget
+from napari_matplotlib.base import NapariMPLWidget
+from napari_matplotlib.tests.helpers import (
+    assert_figures_equal,
+    assert_figures_not_equal,
+)
+
+
+@pytest.mark.parametrize("widget_cls", [HistogramWidget, SliceWidget])
+def test_change_one_layer(
+    make_napari_viewer, brain_data, astronaut_data, widget_cls
+):
+    """
+    Test all widgets that take one layer as input to make sure the plot changes
+    when the napari layer selection changes.
+    """
+    viewer = make_napari_viewer()
+    assert_one_layer_plot_changes(
+        viewer, widget_cls, brain_data, astronaut_data
+    )
+
+
+def assert_one_layer_plot_changes(
+    viewer: Viewer,
+    widget_cls: Type[NapariMPLWidget],
+    data1: Tuple[npt.NDArray[np.generic], Dict[str, Any]],
+    data2: Tuple[npt.NDArray[np.generic], Dict[str, Any]],
+) -> None:
+    """
+    When the selected layer is changed, make sure the plot generated
+    by `widget_cls` also changes.
+    """
+    widget = widget_cls(viewer)
+
+    viewer.add_image(data1[0], **data1[1])
+    viewer.add_image(data2[0], **data2[1])
+
+    # Select first layer
+    viewer.layers.selection.clear()
+    viewer.layers.selection.add(viewer.layers[0])
+    fig1 = deepcopy(widget.figure)
+
+    # Re-selecting first layer should produce identical plot
+    viewer.layers.selection.clear()
+    viewer.layers.selection.add(viewer.layers[0])
+    assert_figures_equal(widget.figure, fig1)
+
+    # Plotting the second layer should produce a different plot
+    viewer.layers.selection.clear()
+    viewer.layers.selection.add(viewer.layers[1])
+    assert_figures_not_equal(widget.figure, fig1)