diff --git a/TypeScript/test/jest/approvals.spec.ts b/TypeScript/test/jest/approvals.spec.ts
new file mode 100644
index 00000000..bb7f45f9
--- /dev/null
+++ b/TypeScript/test/jest/approvals.spec.ts
@@ -0,0 +1,54 @@
+import { Item, GildedRose } from '@/gilded-rose';
+
+/**
+ * This unit test uses [Jest Snapshot](https://goo.gl/fbAQLP).
+ *
+ * There are two test cases here with different styles:
+ *
"foo" is more similar to the unit test from the 'Java' version
+ * "thirtyDays" is more similar to the TextTest from the 'Java' version
+ *
+ * I suggest choosing one style to develop and deleting the other.
+ */
+
+describe('Gilded Rose Approval', () => {
+
+ let gameConsoleOutput: string;
+ let originalConsoleLog: (message: any) => void;
+ let originalProcessArgv: string[]
+
+ function gameConsoleLog(msg: string) {
+ if (msg) {
+ gameConsoleOutput += msg;
+ }
+ gameConsoleOutput += "\n";
+ }
+
+ beforeEach(() => {
+ // prepare capturing console.log to our own gameConsoleLog.
+ gameConsoleOutput = "";
+ originalConsoleLog = console.log;
+ console.log = gameConsoleLog;
+ originalProcessArgv = process.argv;
+ });
+
+ afterEach(() => {
+ // reset original console.log
+ console.log = originalConsoleLog;
+ process.argv = originalProcessArgv;
+ });
+
+ it('should foo', () => {
+ const gildedRose = new GildedRose([new Item('foo', 0, 0)]);
+ const items = gildedRose.updateQuality();
+
+ expect(items).toMatchSnapshot();
+ });
+
+ it('should thirtyDays', () => {
+ process.argv = ["", "