diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js
deleted file mode 100644
index 96bad35a17e2e3a2ceca85ae498cc9eeee90cf7e..0000000000000000000000000000000000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
-DecoratorTest = TestCase('DecoratorTest');
-DecoratorTest.prototype.testDecoratorList = function () {
-    /*:DOC += <ul id="list">
-     <li>item1</li>
-     <li>item2</li>
-     <li>item3</li>
-     <li>item4</li>
-     </ul>
-     */
-    var list = $('#list');
-    list.decorate('list');
-    assertTrue($(list.find('li')[0]).hasClass('odd'));
-    assertFalse($(list.find('li')[0]).hasClass('even'));
-    assertTrue($(list.find('li')[1]).hasClass('even'));
-    assertFalse($(list.find('li')[1]).hasClass('odd'));
-    assertTrue($(list.find('li')[2]).hasClass('odd'));
-    assertFalse($(list.find('li')[2]).hasClass('even'));
-    assertTrue($(list.find('li')[3]).hasClass('even'));
-    assertFalse($(list.find('li')[3]).hasClass('odd'));
-    assertTrue($(list.find('li')[3]).hasClass('last'));
-};
-
-DecoratorTest.prototype.testDecoratorGeneral = function () {
-    /*:DOC += <div id="foo">
-     <div class="item even">item1</div>
-     <div class="item odd">item2</div>
-     <div class="item odd">item3</div>
-     <div class="item even">item4</div>
-     </div>
-     */
-    var itemClass = '.item';
-    $(itemClass).decorate('generic');
-    assertTrue($($(itemClass)[0]).hasClass('odd'));
-    assertFalse($($(itemClass)[0]).hasClass('even'));
-    assertTrue($($(itemClass)[0]).hasClass('first'));
-    assertFalse($($(itemClass)[0]).hasClass('last'));
-
-    assertFalse($($(itemClass)[1]).hasClass('odd'));
-    assertTrue($($(itemClass)[1]).hasClass('even'));
-    assertFalse($($(itemClass)[1]).hasClass('first'));
-    assertFalse($($(itemClass)[1]).hasClass('last'));
-
-    assertTrue($($(itemClass)[2]).hasClass('odd'));
-    assertFalse($($(itemClass)[2]).hasClass('even'));
-    assertFalse($($(itemClass)[2]).hasClass('first'));
-    assertFalse($($(itemClass)[2]).hasClass('last'));
-
-    assertFalse($($(itemClass)[3]).hasClass('odd'));
-    assertTrue($($(itemClass)[3]).hasClass('even'));
-    assertFalse($($(itemClass)[3]).hasClass('first'));
-    assertTrue($($(itemClass)[3]).hasClass('last'));
-};
-
-DecoratorTest.prototype.testDecoratorTable = function (){
-    /*:DOC += <table id="foo">
-     <thead>
-     <tr>
-     <th>Month</th>
-     <th>Savings</th>
-     </tr>
-     </thead>
-     <tfoot>
-     <tr>
-     <td>Sum</td>
-     <td>$180</td>
-     </tr>
-     </tfoot>
-     <tbody>
-     <tr>
-     <td>January</td>
-     <td>$100</td>
-     </tr>
-     <tr>
-     <td>February</td>
-     <td>$80</td>
-     </tr>
-     </tbody>
-     </table>
-     */
-    var tableId = '#foo';
-    $(tableId).decorate('table');
-    assertTrue($(tableId).find('thead tr').hasClass('first'));
-    assertTrue($(tableId).find('thead tr').hasClass('last'));
-    assertFalse($(tableId).find('thead tr').hasClass('odd'));
-    assertFalse($(tableId).find('thead tr').hasClass('even'));
-
-    assertTrue($(tableId).find('tfoot tr').hasClass('first'));
-    assertTrue($(tableId).find('tfoot tr').hasClass('last'));
-    assertFalse($(tableId).find('tfoot tr').hasClass('odd'));
-    assertFalse($(tableId).find('tfoot tr').hasClass('even'));
-
-    assertFalse($(tableId).find('tfoot tr td').last().hasClass('first'));
-    assertTrue($(tableId).find('tfoot tr td').last().hasClass('last'));
-    assertFalse($(tableId).find('tfoot tr td').last().hasClass('odd'));
-    assertFalse($(tableId).find('tfoot tr td').last().hasClass('even'));
-
-    assertTrue($(tableId).find('tbody tr').first().hasClass('first'));
-    assertTrue($(tableId).find('tbody tr').first().hasClass('odd'));
-    assertFalse($(tableId).find('tbody tr').first().hasClass('last'));
-    assertFalse($(tableId).find('tbody tr').first().hasClass('even'));
-    assertFalse($(tableId).find('tbody tr').last().hasClass('first'));
-    assertFalse($(tableId).find('tbody tr').last().hasClass('odd'));
-    assertTrue($(tableId).find('tbody tr').last().hasClass('last'));
-    assertTrue($(tableId).find('tbody tr').last().hasClass('even'));
-
-    assertFalse($(tableId).find('tbody tr td').last().hasClass('first'));
-    assertFalse($(tableId).find('tbody tr td').last().hasClass('odd'));
-    assertTrue($(tableId).find('tbody tr td').last().hasClass('last'));
-    assertFalse($(tableId).find('tbody tr td').last().hasClass('even'));
-};
-
-DecoratorTest.prototype.testDecoratorDataList = function () {
-    /*:DOC += <dl id="data-list">
-        <dt>item</dt>
-        <dt>item</dt>
-        <dd>item</dd>
-        <dd>item</dd>
-     </dl>
-     */
-    var listId = '#data-list';
-    $(listId).decorate('dataList');
-    assertTrue($(listId).find('dt').first().hasClass('odd'));
-    assertFalse($(listId).find('dt').first().hasClass('even'));
-    assertFalse($(listId).find('dt').first().hasClass('last'));
-
-    assertTrue($(listId).find('dt').last().hasClass('even'));
-    assertFalse($(listId).find('dt').last().hasClass('odd'));
-    assertTrue($(listId).find('dt').last().hasClass('last'));
-
-    assertTrue($(listId).find('dd').first().hasClass('odd'));
-    assertFalse($(listId).find('dd').first().hasClass('even'));
-    assertFalse($(listId).find('dd').first().hasClass('last'));
-
-    assertTrue($(listId).find('dd').last().hasClass('even'));
-    assertFalse($(listId).find('dd').last().hasClass('odd'));
-    assertTrue($(listId).find('dd').last().hasClass('last'));
-};
diff --git a/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..9b488c417674dabf8896c8837ddb9109e95c67b0
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js
@@ -0,0 +1,202 @@
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/* eslint-disable max-nested-callbacks */
+define([
+    'mage/decorate',
+    'jquery'
+], function (decorate, $) {
+    'use strict';
+
+    describe('mage/decorate', function () {
+        describe('"list" method', function () {
+            var listId = 'testList';
+
+            beforeEach(function () {
+                var list = $('<ul id="' + listId + '"><li/><li/><li/></ul>');
+
+                $('body').append(list);
+            });
+
+            afterEach(function () {
+                $('#' + listId).remove();
+            });
+
+            it('Check correct class decoration', function () {
+                var $list = $('#' + listId);
+
+                $list.decorate('list');
+                expect($list.find('li:first').hasClass('first')).toBe(false);
+                expect($list.find('li:first').hasClass('odd')).toBe(true);
+                expect($list.find('li:last').hasClass('last')).toBe(true);
+                expect($list.find('li:odd').hasClass('even')).toBe(true);
+                expect($list.find('li:even').hasClass('odd')).toBe(true);
+            });
+        });
+
+        describe('"generic" method', function () {
+            var listId = 'testList';
+
+            beforeEach(function () {
+                var list = $('<ul id="' + listId + '"><li/><li/><li/></ul>');
+
+                $('body').append(list);
+            });
+
+            afterEach(function () {
+                $('#' + listId).remove();
+            });
+
+            it('Check correct class decoration with default params', function () {
+                var $list = $('#' + listId);
+
+                $list.find('li').decorate('generic');
+                expect($list.find('li:first').hasClass('first')).toBe(true);
+                expect($list.find('li:first').hasClass('odd')).toBe(true);
+                expect($list.find('li:last').hasClass('last')).toBe(true);
+                expect($list.find('li:odd').hasClass('even')).toBe(true);
+                expect($list.find('li:even').hasClass('odd')).toBe(true);
+            });
+
+            it('Check correct class decoration with custom params', function () {
+                var $list = $('#' + listId);
+
+                $list.find('li').decorate('generic', ['last', 'first']);
+                expect($list.find('li:first').hasClass('first')).toBe(true);
+                expect($list.find('li:first').hasClass('odd')).toBe(false);
+                expect($list.find('li:last').hasClass('last')).toBe(true);
+                expect($list.find('li:odd').hasClass('even')).toBe(false);
+                expect($list.find('li:even').hasClass('odd')).toBe(false);
+            });
+
+            it('Check correct class decoration with empty items', function () {
+                var $list = $('#' + listId);
+
+                $list.find('span').decorate('generic', ['last', 'first']);
+                expect($list.find('li:first').hasClass('first')).toBe(false);
+                expect($list.find('li:first').hasClass('odd')).toBe(false);
+                expect($list.find('li:last').hasClass('last')).toBe(false);
+                expect($list.find('li:odd').hasClass('even')).toBe(false);
+                expect($list.find('li:even').hasClass('odd')).toBe(false);
+            });
+        });
+
+        describe('"table" method', function () {
+            var tableId = 'testTable';
+
+            beforeEach(function () {
+                var table = $('<table id="' + tableId + '">' +
+                    '<thead><tr><th/><th/></tr></thead>' +
+                    '<tbody>' +
+                    '<tr><td/><td/></tr>' +
+                    '<tr><td/><td/></tr>' +
+                    '<tr><td/><td/></tr>' +
+                    '</tbody>>' +
+                    '<tfoot><tr><th/><th/></tr></tfoot>' +
+                    '</table>');
+
+                $('body').append(table);
+            });
+
+            afterEach(function () {
+                $('#' + tableId).remove();
+            });
+
+            it('Check correct class decoration with default params', function () {
+                var $table = $('#' + tableId);
+
+                $table.decorate('table');
+                expect($table.find('tbody tr:first').hasClass('first')).toBe(true);
+                expect($table.find('tbody tr:first').hasClass('odd')).toBe(true);
+                expect($table.find('tbody tr:odd').hasClass('even')).toBe(true);
+                expect($table.find('tbody tr:even').hasClass('odd')).toBe(true);
+                expect($table.find('tbody tr:last').hasClass('last')).toBe(true);
+                expect($table.find('thead tr:first').hasClass('first')).toBe(true);
+                expect($table.find('thead tr:last').hasClass('last')).toBe(true);
+                expect($table.find('tfoot tr:first').hasClass('first')).toBe(true);
+                expect($table.find('tfoot tr:last').hasClass('last')).toBe(true);
+                expect($table.find('tr td:last').hasClass('last')).toBe(true);
+                expect($table.find('tr td:first').hasClass('first')).toBe(false);
+            });
+
+            it('Check correct class decoration with custom params', function () {
+                var $table = $('#' + tableId);
+
+                $table.decorate('table', {
+                    'tbody': ['first'],
+                    'tbody tr': ['first'],
+                    'thead tr': ['first'],
+                    'tfoot tr': ['last'],
+                    'tr td': ['first']
+                });
+                expect($table.find('tbody:first').hasClass('first')).toBe(true);
+                expect($table.find('tbody tr:first').hasClass('first')).toBe(true);
+                expect($table.find('tbody tr:first').hasClass('odd')).toBe(false);
+                expect($table.find('tbody tr:odd').hasClass('even')).toBe(false);
+                expect($table.find('tbody tr:even').hasClass('odd')).toBe(false);
+                expect($table.find('tbody tr:last').hasClass('last')).toBe(false);
+                expect($table.find('thead tr:first').hasClass('first')).toBe(true);
+                expect($table.find('thead tr:last').hasClass('last')).toBe(false);
+                expect($table.find('tfoot tr:first').hasClass('first')).toBe(false);
+                expect($table.find('tfoot tr:last').hasClass('last')).toBe(true);
+                expect($table.find('tr td:last').hasClass('last')).toBe(false);
+                expect($table.find('tr td:first').hasClass('first')).toBe(true);
+            });
+        });
+
+        describe('"dataList" method', function () {
+            var listId = 'testDataList';
+
+            beforeEach(function () {
+                var list = $('<dl id="' + listId + '"><dt/><dd/><dt/><dd/><dt/><dd/></dl>');
+
+                $('body').append(list);
+            });
+
+            afterEach(function () {
+                $('#' + listId).remove();
+            });
+
+            it('Check correct class decoration', function () {
+                var $list = $('#' + listId);
+
+                $list.decorate('dataList');
+                expect($list.find('dt:first').hasClass('first')).toBe(false);
+                expect($list.find('dt:first').hasClass('odd')).toBe(true);
+                expect($list.find('dt:odd').hasClass('even')).toBe(true);
+                expect($list.find('dt:even').hasClass('odd')).toBe(true);
+                expect($list.find('dt:last').hasClass('last')).toBe(true);
+                expect($list.find('dd:first').hasClass('first')).toBe(false);
+                expect($list.find('dd:first').hasClass('odd')).toBe(true);
+                expect($list.find('dd:odd').hasClass('even')).toBe(true);
+                expect($list.find('dd:even').hasClass('odd')).toBe(true);
+                expect($list.find('dd:last').hasClass('last')).toBe(true);
+            });
+        });
+
+        describe('Call decorate with fake method', function () {
+            var listId = 'testDataList';
+
+            beforeEach(function () {
+                var list = $('<dl id="' + listId + '"><dt/><dd/><dt/><dd/><dt/><dd/></dl>');
+
+                $('body').append(list);
+            });
+
+            afterEach(function () {
+                $('#' + listId).remove();
+            });
+
+            it('Check error message', function () {
+                var $list = $('#' + listId);
+
+                spyOn(jQuery, 'error');
+                $list.decorate('customMethod');
+
+                expect(jQuery.error).toHaveBeenCalledWith('Method customMethod does not exist on jQuery.decorate');
+            });
+        });
+    });
+});