diff --git a/frontend/test/visualizations/__support__/visualizations.js b/frontend/test/visualizations/__support__/visualizations.js
index 7aa257b4d00fd65613458a584e4763533b539c01..0112378a8a83fb8fe9521b20e501e3119195d72e 100644
--- a/frontend/test/visualizations/__support__/visualizations.js
+++ b/frontend/test/visualizations/__support__/visualizations.js
@@ -1,3 +1,6 @@
+import { getComputedSettingsForSeries } from "metabase/visualizations/lib/settings/visualization";
+import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
+
 export function makeCard(card) {
   return {
     name: "card",
@@ -160,3 +163,19 @@ export function dispatchUIEvent(element, eventName) {
   e.initUIEvent(eventName, true, true, window, 1);
   element.dispatchEvent(e);
 }
+
+export function renderChart(renderer, element, series, props) {
+  const chartType = series[0].card.display;
+  const settings = getComputedSettingsForSeries(series);
+
+  return renderer(element, {
+    chartType,
+    series,
+    settings,
+    ...props,
+  });
+}
+
+export function renderLineAreaBar(...args) {
+  return renderChart(lineAreaBarRenderer, ...args);
+}
diff --git a/frontend/test/visualizations/components/LineAreaBarRenderer-bar.unit.spec.js b/frontend/test/visualizations/components/LineAreaBarRenderer-bar.unit.spec.js
index d435450fd29819a94bed1331370ed9acf9585842..253ee58436784ccc2e7dd779b36375b2909a7711 100644
--- a/frontend/test/visualizations/components/LineAreaBarRenderer-bar.unit.spec.js
+++ b/frontend/test/visualizations/components/LineAreaBarRenderer-bar.unit.spec.js
@@ -1,10 +1,10 @@
 import "__support__/mocks"; // included explicitly whereas with integrated tests it comes with __support__/integrated_tests
 
-import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
 import {
   NumberColumn,
   StringColumn,
   dispatchUIEvent,
+  renderLineAreaBar,
 } from "../__support__/visualizations";
 
 const DEFAULT_SETTINGS = {
@@ -14,6 +14,7 @@ const DEFAULT_SETTINGS = {
   "graph.y_axis.axis_enabled": true,
   "graph.colors": ["#00FF00", "#FF0000"],
   series: () => ({ display: "bar" }),
+  column: () => ({ date_style: "MMMM D, YYYY" }),
 };
 
 describe("LineAreaBarRenderer-bar", () => {
@@ -34,109 +35,85 @@ describe("LineAreaBarRenderer-bar", () => {
 
   ["area", "bar"].forEach(chartType =>
     ["stacked", "normalized"].forEach(stack_type =>
-      it(
-        "should render a " +
-          (stack_type || "") +
-          " " +
-          chartType +
-          " chart with 2 series",
-        function() {
-          return new Promise((resolve, reject) => {
-            let hoverCount = 0;
-            lineAreaBarRenderer(element, {
-              chartType: chartType,
-              series: [
-                {
-                  card: {},
-                  data: {
-                    cols: [
-                      StringColumn({
-                        display_name: "Category",
-                        source: "breakout",
-                      }),
-                      NumberColumn({
-                        display_name: "Sum",
-                        source: "aggregation",
-                      }),
-                    ],
-                    rows: [["A", 1]],
-                  },
+      it(`should render a ${stack_type ||
+        ""} ${chartType} chart with 2 series`, () => {
+        const onHoverChange = jest.fn();
+        renderLineAreaBar(
+          element,
+          [
+            {
+              card: {
+                display: chartType,
+                visualization_settings: {
+                  ...DEFAULT_SETTINGS,
+                  "stackable.stack_type": stack_type,
                 },
-                {
-                  card: {},
-                  data: {
-                    cols: [
-                      StringColumn({
-                        display_name: "Category",
-                        source: "breakout",
-                      }),
-                      NumberColumn({
-                        display_name: "Count",
-                        source: "aggregation",
-                      }),
-                    ],
-                    rows: [["A", 2]],
-                  },
-                },
-              ],
-              settings: {
-                ...DEFAULT_SETTINGS,
-                "stackable.stack_type": stack_type,
               },
-              onHoverChange: hover => {
-                try {
-                  const data =
-                    hover.data &&
-                    hover.data.map(({ key, value }) => ({ key, value }));
-                  let standardDisplay;
-                  let normalizedDisplay;
-
-                  hoverCount++;
-                  if (hoverCount === 1) {
-                    standardDisplay = [
-                      { key: "Category", value: "A" },
-                      { key: "Sum", value: 1 },
-                    ];
-
-                    normalizedDisplay = [
-                      { key: "Category", value: "A" },
-                      { key: "% Sum", value: "33%" },
-                    ];
-
-                    expect(data).toEqual(
-                      stack_type === "normalized"
-                        ? normalizedDisplay
-                        : standardDisplay,
-                    );
-                    dispatchUIEvent(qsa(".bar, .dot")[1], "mousemove");
-                  } else if (hoverCount === 2) {
-                    standardDisplay = [
-                      { key: "Category", value: "A" },
-                      { key: "Count", value: 2 },
-                    ];
-
-                    normalizedDisplay = [
-                      { key: "Category", value: "A" },
-                      { key: "% Count", value: "67%" },
-                    ];
+              data: {
+                cols: [
+                  StringColumn({
+                    display_name: "Category",
+                    source: "breakout",
+                  }),
+                  NumberColumn({
+                    display_name: "Sum",
+                    source: "aggregation",
+                  }),
+                ],
+                rows: [["A", 1]],
+              },
+            },
+            {
+              card: {},
+              data: {
+                cols: [
+                  StringColumn({
+                    display_name: "Category",
+                    source: "breakout",
+                  }),
+                  NumberColumn({
+                    display_name: "Count",
+                    source: "aggregation",
+                  }),
+                ],
+                rows: [["A", 2]],
+              },
+            },
+          ],
+          {
+            onHoverChange,
+          },
+        );
 
-                    expect(data).toEqual(
-                      stack_type === "normalized"
-                        ? normalizedDisplay
-                        : standardDisplay,
-                    );
+        // hover over each bar
+        dispatchUIEvent(qsa(".bar, .dot")[0], "mousemove");
+        dispatchUIEvent(qsa(".bar, .dot")[1], "mousemove");
 
-                    resolve();
-                  }
-                } catch (e) {
-                  reject(e);
-                }
-              },
-            });
-            dispatchUIEvent(qsa(".bar, .dot")[0], "mousemove");
-          });
-        },
-      ),
+        const { calls } = onHoverChange.mock;
+        if (stack_type === "normalized") {
+          expect(getDataKeyValues(calls[0][0])).toEqual([
+            { key: "Category", value: "A" },
+            { key: "% Sum", value: "33%" },
+          ]);
+          expect(getDataKeyValues(calls[1][0])).toEqual([
+            { key: "Category", value: "A" },
+            { key: "% Count", value: "67%" },
+          ]);
+        } else {
+          expect(getDataKeyValues(calls[0][0])).toEqual([
+            { key: "Category", value: "A" },
+            { key: "Sum", value: 1 },
+          ]);
+          expect(getDataKeyValues(calls[1][0])).toEqual([
+            { key: "Category", value: "A" },
+            { key: "Count", value: 2 },
+          ]);
+        }
+      }),
     ),
   );
 });
+
+function getDataKeyValues(hover) {
+  return hover.data.map(({ key, value }) => ({ key, value }));
+}
diff --git a/frontend/test/visualizations/components/LineAreaBarRenderer-scatter.unit.spec.js b/frontend/test/visualizations/components/LineAreaBarRenderer-scatter.unit.spec.js
index a2b25cfa983c85ab7a3cda81e0bd4739b0b775b3..cce9bb459370a4723edbfa1bb09b26ace6b392c7 100644
--- a/frontend/test/visualizations/components/LineAreaBarRenderer-scatter.unit.spec.js
+++ b/frontend/test/visualizations/components/LineAreaBarRenderer-scatter.unit.spec.js
@@ -2,7 +2,11 @@ import "__support__/mocks"; // included explicitly whereas with integrated tests
 
 import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
 
-import { NumberColumn, dispatchUIEvent } from "../__support__/visualizations";
+import {
+  NumberColumn,
+  dispatchUIEvent,
+  renderLineAreaBar,
+} from "../__support__/visualizations";
 
 const DEFAULT_SETTINGS = {
   "graph.x_axis.scale": "linear",
@@ -11,6 +15,7 @@ const DEFAULT_SETTINGS = {
   "graph.y_axis.axis_enabled": true,
   "graph.colors": ["#000000"],
   series: () => ({ display: "scatter" }),
+  column: () => ({}),
 };
 
 describe("LineAreaBarRenderer-scatter", () => {
@@ -32,11 +37,14 @@ describe("LineAreaBarRenderer-scatter", () => {
   });
 
   it("should render a scatter chart with 2 dimensions", function(done) {
-    lineAreaBarRenderer(element, {
-      chartType: "scatter",
-      series: [
+    renderLineAreaBar(
+      element,
+      [
         {
-          card: {},
+          card: {
+            display: "scatter",
+            visualization_settings: DEFAULT_SETTINGS,
+          },
           data: {
             cols: [
               NumberColumn({ display_name: "A", source: "breakout" }),
@@ -46,27 +54,31 @@ describe("LineAreaBarRenderer-scatter", () => {
           },
         },
       ],
-      settings: DEFAULT_SETTINGS,
-      onHoverChange: hover => {
-        expect(hover.data.length).toBe(2);
-        expect(hover.data[0].key).toBe("A");
-        expect(hover.data[0].value).toBe(1);
-        expect(hover.data[1].key).toBe("B");
-        expect(hover.data[1].value).toBe(2);
+      {
+        onHoverChange: hover => {
+          expect(hover.data.length).toBe(2);
+          expect(hover.data[0].key).toBe("A");
+          expect(hover.data[0].value).toBe(1);
+          expect(hover.data[1].key).toBe("B");
+          expect(hover.data[1].value).toBe(2);
 
-        done();
+          done();
+        },
       },
-    });
+    );
 
     dispatchUIEvent(qsa(".bubble")[0], "mousemove");
   });
 
   it("should render a scatter chart with 2 dimensions and 1 metric", function(done) {
-    lineAreaBarRenderer(element, {
-      chartType: "scatter",
-      series: [
+    renderLineAreaBar(
+      element,
+      [
         {
-          card: {},
+          card: {
+            display: "scatter",
+            visualization_settings: DEFAULT_SETTINGS,
+          },
           data: {
             cols: [
               NumberColumn({ display_name: "A", source: "breakout" }),
@@ -77,18 +89,19 @@ describe("LineAreaBarRenderer-scatter", () => {
           },
         },
       ],
-      settings: DEFAULT_SETTINGS,
-      onHoverChange: hover => {
-        expect(hover.data.length).toBe(3);
-        expect(hover.data[0].key).toBe("A");
-        expect(hover.data[0].value).toBe(1);
-        expect(hover.data[1].key).toBe("B");
-        expect(hover.data[1].value).toBe(2);
-        expect(hover.data[2].key).toBe("C");
-        expect(hover.data[2].value).toBe(3);
-        done();
+      {
+        onHoverChange: hover => {
+          expect(hover.data.length).toBe(3);
+          expect(hover.data[0].key).toBe("A");
+          expect(hover.data[0].value).toBe(1);
+          expect(hover.data[1].key).toBe("B");
+          expect(hover.data[1].value).toBe(2);
+          expect(hover.data[2].key).toBe("C");
+          expect(hover.data[2].value).toBe(3);
+          done();
+        },
       },
-    });
+    );
 
     dispatchUIEvent(qsa(".bubble")[0], "mousemove");
   });
diff --git a/frontend/test/visualizations/components/LineAreaBarRenderer.unit.spec.js b/frontend/test/visualizations/components/LineAreaBarRenderer.unit.spec.js
index 929e165fb92b385c1754a6bcb11573f07898869b..447d131f151112c98465884a031083f7d5c040c1 100644
--- a/frontend/test/visualizations/components/LineAreaBarRenderer.unit.spec.js
+++ b/frontend/test/visualizations/components/LineAreaBarRenderer.unit.spec.js
@@ -1,6 +1,5 @@
 import "__support__/mocks"; // included explicitly whereas with integrated tests it comes with __support__/integrated_tests
 
-import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
 import { formatValue } from "metabase/lib/formatting";
 
 import d3 from "d3";
@@ -10,6 +9,7 @@ import {
   DateTimeColumn,
   StringColumn,
   dispatchUIEvent,
+  renderLineAreaBar,
 } from "../__support__/visualizations";
 
 let formatTz = offset =>
@@ -268,46 +268,49 @@ describe("LineAreaBarRenderer", () => {
     unit,
     settings,
   }) => {
-    lineAreaBarRenderer(element, {
-      chartType: "line",
-      series: rowsOfSeries.map(rows => ({
+    renderLineAreaBar(
+      element,
+      rowsOfSeries.map(rows => ({
         data: {
           cols: [DateTimeColumn({ unit }), NumberColumn()],
           rows: rows,
         },
-        card: {},
+        card: {
+          display: "line",
+          visualization_settings: {
+            "graph.x_axis.scale": "timeseries",
+            "graph.x_axis.axis_enabled": true,
+            "graph.colors": ["#000000"],
+            ...settings,
+          },
+        },
       })),
-      settings: {
-        "graph.x_axis.scale": "timeseries",
-        "graph.x_axis.axis_enabled": true,
-        "graph.colors": ["#000000"],
-        series: () => ({ display: "line" }),
-        ...settings,
+      {
+        onHoverChange,
       },
-      onHoverChange,
-    });
+    );
   };
 
   const renderScalarBar = ({ scalars, onHoverChange, unit }) => {
-    lineAreaBarRenderer(element, {
-      chartType: "bar",
-      series: scalars.map(scalar => ({
+    renderLineAreaBar(
+      element,
+      scalars.map(scalar => ({
         data: {
           cols: [StringColumn(), NumberColumn()],
           rows: [scalar],
         },
-        card: {},
+        card: {
+          display: "bar",
+          visualization_settings: {
+            "bar.scalar_series": true,
+            "funnel.type": "bar",
+            "graph.colors": ["#509ee3", "#9cc177", "#a989c5", "#ef8c8c"],
+            "graph.x_axis.axis_enabled": true,
+            "graph.x_axis.scale": "ordinal",
+          },
+        },
       })),
-      settings: {
-        "bar.scalar_series": true,
-        "funnel.type": "bar",
-        "graph.colors": ["#509ee3", "#9cc177", "#a989c5", "#ef8c8c"],
-        "graph.x_axis.axis_enabled": true,
-        "graph.x_axis.scale": "ordinal",
-        "graph.x_axis._is_numeric": false,
-        series: () => ({ display: "bar" }),
-      },
-      onHoverChange,
-    });
+      { onHoverChange },
+    );
   };
 });
diff --git a/frontend/test/visualizations/lib/settings.unit.spec.js b/frontend/test/visualizations/lib/settings.unit.spec.js
index c3d0e9cf4f3d038288635aa8b00f21e28621e2b3..2cea5e665a5d7776e56eadaa7e09bf24de355d1e 100644
--- a/frontend/test/visualizations/lib/settings.unit.spec.js
+++ b/frontend/test/visualizations/lib/settings.unit.spec.js
@@ -97,6 +97,7 @@ describe("settings framework", () => {
           hidden: false,
           props: {},
           value: "foo",
+          set: true,
         },
       ]);
     });