Tests for PROFILE detection
diff --git a/install.sh b/install.sh
index 235b814..89d0ab7 100755
--- a/install.sh
+++ b/install.sh
@@ -66,6 +66,26 @@
   }
 }
 
+#
+# Detect profile file if not specified as environment variable
+# (eg: PROFILE=~/.myprofile)
+# The echo'ed path is guaranteed to be an existing file
+# Otherwise, an empty string is returned
+#
+nvm_detect_profile() {
+  if [ -f "$PROFILE" ]; then
+    echo "$PROFILE"
+  elif [ -f "$HOME/.bashrc" ]; then
+    echo "$HOME/.bashrc"
+  elif [ -f "$HOME/.bash_profile" ]; then
+    echo "$HOME/.bash_profile"
+  elif [ -f "$HOME/.zshrc" ]; then
+    echo "$HOME/.zshrc"
+  elif [ -f "$HOME/.profile" ]; then
+    echo "$HOME/.profile"
+  fi
+}
+
 nvm_do_install() {
   if [ -z "$METHOD" ]; then
     # Autodetect install method
@@ -93,39 +113,25 @@
 
   echo
 
-  # Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile).
-  if [ -z "$PROFILE" ]; then
-    if [ -f "$HOME/.bashrc" ]; then
-      PROFILE="$HOME/.bashrc"
-    elif [ -f "$HOME/.bash_profile" ]; then
-      PROFILE="$HOME/.bash_profile"
-    elif [ -f "$HOME/.zshrc" ]; then
-      PROFILE="$HOME/.zshrc"
-    elif [ -f "$HOME/.profile" ]; then
-      PROFILE="$HOME/.profile"
-    fi
-  fi
+  local NVM_PROFILE
+  NVM_PROFILE=$(nvm_detect_profile)
 
   SOURCE_STR="\nexport NVM_DIR=\"$NVM_DIR\"\n[ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\"  # This loads nvm"
 
-  if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then
-    if [ -z "$PROFILE" ]; then
-      echo "=> Profile not found. Tried ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
-      echo "=> Create one of them and run this script again"
-    else
-      echo "=> Profile $PROFILE not found"
-      echo "=> Create it (touch $PROFILE) and run this script again"
-    fi
+  if [ -z "$NVM_PROFILE" ] ; then
+    echo "=> Profile not found. Tried $NVM_PROFILE (as defined in \$PROFILE), ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
+    echo "=> Create one of them and run this script again"
+    echo "=> Create it (touch $NVM_PROFILE) and run this script again"
     echo "   OR"
     echo "=> Append the following lines to the correct file yourself:"
     printf "$SOURCE_STR"
     echo
   else
-    if ! grep -qc 'nvm.sh' "$PROFILE"; then
-      echo "=> Appending source string to $PROFILE"
-      printf "$SOURCE_STR\n" >> "$PROFILE"
+    if ! grep -qc 'nvm.sh' "$NVM_PROFILE"; then
+      echo "=> Appending source string to $NVM_PROFILE"
+      printf "$SOURCE_STR\n" >> "$NVM_PROFILE"
     else
-      echo "=> Source string already in $PROFILE"
+      echo "=> Source string already in $NVM_PROFILE"
     fi
   fi
 
@@ -138,7 +144,7 @@
 # during the execution of the install script
 #
 nvm_reset() {
-  unset -f nvm_do_install nvm_has nvm_download install_nvm_as_script install_nvm_from_git nvm_reset
+  unset -f nvm_do_install nvm_has nvm_download install_nvm_as_script install_nvm_from_git nvm_reset nvm_detect_profile
 }
 
 [ "_$NVM_ENV" = "_testing" ] || nvm_do_install
diff --git a/test/install_script/nvm_detect_profile b/test/install_script/nvm_detect_profile
new file mode 100755
index 0000000..08aea82
--- /dev/null
+++ b/test/install_script/nvm_detect_profile
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+cleanup () {
+  unset -f setup cleanup die
+  unset _PROFILE
+  rm -f .bashrc .bash_profile .zshrc .profile test_profile > /dev/null 2>&1
+}
+die () { echo $@ ; cleanup ; exit 1; }
+
+NVM_ENV=testing . ../../install.sh
+
+setup () {
+  touch .bashrc
+  touch .bash_profile
+  touch .zshrc
+  touch .profile
+  touch test_profile
+}
+
+#Let's hack $HOME
+HOME="."
+
+setup
+
+
+# $PROFILE points to a valid file, its path must be returned
+PROFILE="test_profile"
+_PROFILE=$(nvm_detect_profile)
+[ "_$_PROFILE" = "_$PROFILE" ] || die "nvm_detect_profile didn't pick \$PROFILE"
+
+# $PROFILE doesn't point to a valid file, its path must not be returned
+PROFILE="invalid_profile"
+_PROFILE=$(nvm_detect_profile)
+[ "_$_PROFILE" != "_$PROFILE" ] || die "nvm_detect_profile shouldn't pick \$PROFILE when it's not a valid file"
+
+
+# Below are tests for when $PROFILE is undefined
+rm test_profile
+unset PROFILE
+
+# It should favor .bashrc if file exists
+_PROFILE=$(nvm_detect_profile)
+[ "_$_PROFILE" = "_$HOME/.bashrc" ] || die "nvm_detect_profile should have selected .bashrc"
+
+rm .bashrc
+# Otherwise, it should favor .bash_profile if file exists
+_PROFILE=$(nvm_detect_profile)
+[ "_$_PROFILE" = "_$HOME/.bash_profile" ] || die "nvm_detect_profile should have selected .bash_profile"
+
+rm .bash_profile
+# Otherwise, it should favor .zshrc if file exists
+_PROFILE=$(nvm_detect_profile)
+[ "_$_PROFILE" = "_$HOME/.zshrc" ] || die "nvm_detect_profile should have selected .zshrc"
+
+rm .zshrc
+# Otherwise, it should favor .profile if file exists
+_PROFILE=$(nvm_detect_profile)
+[ "_$_PROFILE" = "_$HOME/.profile" ] || die "nvm_detect_profile should have selected .profile"
+
+rm .profile
+# It should be empty if none is found
+_PROFILE=$(nvm_detect_profile)
+[ -z "$_PROFILE" ] || die "nvm_detect_profile should have echo'ed an empty value"
+
+
+cleanup
+
diff --git a/test/install_script/nvm_reset b/test/install_script/nvm_reset
index 4005d9c..0f58ee4 100755
--- a/test/install_script/nvm_reset
+++ b/test/install_script/nvm_reset
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 cleanup () {
-  unset -f safe_type
+  unset -f safe_type die cleanup
 }
 die () { echo $@ ; cleanup ; exit 1; }
 
@@ -24,6 +24,7 @@
 ! safe_type install_nvm_as_script || die 'install_nvm_as_script is still available'
 ! safe_type install_nvm_from_git || die 'install_nvm_from_git is still available'
 ! safe_type nvm_reset || die 'nvm_reset is still available'
+! safe_type nvm_detect_profile || die 'nvm_detect_profile is still available'
 
 cleanup