diff --git a/Recursive/Palindrome.js b/Recursive/Palindrome.js
index 9357135174..7d315aea31 100644
--- a/Recursive/Palindrome.js
+++ b/Recursive/Palindrome.js
@@ -1,21 +1,25 @@
+/**
+ * @function Palindrome
+ * @description Check whether the given string is Palindrome or not.
+ * @param {String} str - The input string
+ * @return {Boolean}.
+ * @see [Palindrome](https://en.wikipedia.org/wiki/Palindrome)
+ */
 
-// Check whether the given string is Palindrome or not
-export const Palindrome = (str) => {
+const palindrome = (str) => {
   if (typeof str !== 'string') {
-    str = str.toString()
+    throw new TypeError('Invalid Input')
   }
 
-  if (str === null || str === undefined) {
-    return false
-  }
-
-  if (str.length === 1 || str.length === 0) {
+  if (str.length <= 1) {
     return true
   }
 
   if (str[0] !== str[str.length - 1]) {
     return false
   } else {
-    return Palindrome(str.slice(1, str.length - 1))
+    return palindrome(str.slice(1, str.length - 1))
   }
 }
+
+export { palindrome }
diff --git a/Recursive/test/palindrome.test.js b/Recursive/test/palindrome.test.js
new file mode 100644
index 0000000000..dee9b0af2e
--- /dev/null
+++ b/Recursive/test/palindrome.test.js
@@ -0,0 +1,24 @@
+import { palindrome } from '../Palindrome'
+
+describe('Palindrome', () => {
+  it('expects to return true for palindrome string', () => {
+    const isPalindrome = palindrome('madam')
+    expect(isPalindrome).toBe(true)
+  })
+
+  it('expects to return true for Empty String', () => {
+    const isPalindrome = palindrome('')
+    expect(isPalindrome).toBe(true)
+  })
+
+  it('expects to return false for non-palindrome string', () => {
+    const isPalindrome = palindrome('foobar')
+    expect(isPalindrome).toBe(false)
+  })
+
+  it('Throw Error for Invalid Input', () => {
+    expect(() => palindrome(123)).toThrow('Invalid Input')
+    expect(() => palindrome(null)).toThrow('Invalid Input')
+    expect(() => palindrome(undefined)).toThrow('Invalid Input')
+  })
+})