diff --git a/bin/changelog b/bin/changelog
index 2b08e3e4c2a1c519d2ae05294c938e5e1b74a888..a0d1ad2d730276d9fac6d2831f56a06827239552 100755
--- a/bin/changelog
+++ b/bin/changelog
@@ -42,7 +42,7 @@ class ChangelogOptionParser
       end
 
       opts.on('-h', '--help', 'Print help message') do
-        puts opts
+        $stdout.puts opts
         exit
       end
     end
@@ -72,6 +72,7 @@ class ChangelogEntry
 
     $stdout.puts "\e[32mcreate\e[0m #{file_path}"
     $stdout.puts contents
+
     unless options.dry_run
       write
       amend_commit if options.amend
diff --git a/spec/bin/changelog_spec.rb b/spec/bin/changelog_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..da167dc570fd4f6b296626b6e8d13e98cd6d06ce
--- /dev/null
+++ b/spec/bin/changelog_spec.rb
@@ -0,0 +1,65 @@
+require 'spec_helper'
+
+load File.expand_path('../../bin/changelog', __dir__)
+
+describe 'bin/changelog' do
+  describe ChangelogOptionParser do
+    it 'parses --ammend' do
+      options = described_class.parse(%w[foo bar --amend])
+
+      expect(options.amend).to eq true
+    end
+
+    it 'parses --merge-request' do
+      options = described_class.parse(%w[foo --merge-request 1234 bar])
+
+      expect(options.merge_request).to eq 1234
+    end
+
+    it 'parses -m' do
+      options = described_class.parse(%w[foo -m 4321 bar])
+
+      expect(options.merge_request).to eq 4321
+    end
+
+    it 'parses --dry-run' do
+      options = described_class.parse(%w[foo --dry-run bar])
+
+      expect(options.dry_run).to eq true
+    end
+
+    it 'parses -n' do
+      options = described_class.parse(%w[foo -n bar])
+
+      expect(options.dry_run).to eq true
+    end
+
+    it 'parses --git-username' do
+      allow(described_class).to receive(:git_user_name).and_return('Jane Doe')
+      options = described_class.parse(%w[foo --git-username bar])
+
+      expect(options.author).to eq 'Jane Doe'
+    end
+
+    it 'parses -u' do
+      allow(described_class).to receive(:git_user_name).and_return('John Smith')
+      options = described_class.parse(%w[foo -u bar])
+
+      expect(options.author).to eq 'John Smith'
+    end
+
+    it 'parses -h' do
+      expect do
+        $stdout = StringIO.new
+
+        described_class.parse(%w[foo -h bar])
+      end.to raise_error(SystemExit)
+    end
+
+    it 'assigns title' do
+      options = described_class.parse(%W[foo -m 1 bar\n -u baz\r\n --amend])
+
+      expect(options.title).to eq 'foo bar baz'
+    end
+  end
+end