Propagate exception for non-existing path in os.scandir()

- fixes #498
diff --git a/CHANGES.md b/CHANGES.md
index d0b6e6d..f8b8ec5 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -12,6 +12,10 @@
 
 ## Version 3.7 (as yet unreleased)
 
+### Fixes
+  * raise for `os.scandir` with non-existing directory
+    (see [#498](../../issues/498))
+
 ## [Version 3.6.1](https://pypi.python.org/pypi/pyfakefs/3.6.1)
 
 ### Fixes
diff --git a/pyfakefs/fake_scandir.py b/pyfakefs/fake_scandir.py
index 3b9271e..1645c0f 100644
--- a/pyfakefs/fake_scandir.py
+++ b/pyfakefs/fake_scandir.py
@@ -16,10 +16,12 @@
 and the standalone function available in the standalone `scandir` python
 package.
 """
+import errno
 import os
 import sys
 
 from pyfakefs.extra_packages import use_scandir_package, use_builtin_scandir
+from pyfakefs.helpers import IS_PY2
 
 if sys.version_info >= (3, 6) and use_builtin_scandir:
     BaseClass = os.PathLike
@@ -132,11 +134,15 @@
         else:
             self.abspath = self.filesystem.absnormpath(path)
             self.path = path
-        contents = {}
         try:
             contents = self.filesystem.confirmdir(self.abspath).contents
-        except OSError:
-            pass
+        except OSError as ex:
+            if IS_PY2 and self.filesystem.is_windows_fs:
+                if ex.errno == errno.ENOENT:
+                    # for some reason, under Python 2 / Windows
+                    # raises "No such process" for non-existing path
+                    raise OSError(errno.ESRCH, str(ex), ex.filename)
+            raise
         self.contents_iter = iter(contents)
 
     def __iter__(self):
diff --git a/pyfakefs/tests/fake_os_test.py b/pyfakefs/tests/fake_os_test.py
index bf06c3f..8956ca9 100644
--- a/pyfakefs/tests/fake_os_test.py
+++ b/pyfakefs/tests/fake_os_test.py
@@ -23,6 +23,8 @@
 import time
 import unittest
 
+from pyfakefs.helpers import IS_PY2
+
 from pyfakefs import fake_filesystem
 from pyfakefs.fake_filesystem import FakeFileOpen, is_root
 from pyfakefs.extra_packages import (
@@ -111,6 +113,8 @@
         self.assertEqual(self.os.getcwd(), dirname)
 
     def test_listdir(self):
+        self.assert_raises_os_error(
+            errno.ENOENT, self.os.listdir, 'non_existing/fake_dir')
         directory = self.make_path('xyzzy', 'plugh')
         files = ['foo', 'bar', 'baz']
         for f in files:
@@ -4941,6 +4945,18 @@
         self.assertEqual(self.os.path.join(self.scandir_path(), 'file'),
                          os.fspath(self.dir_entries[1]))
 
+    @unittest.skipIf(IS_PY2 and TestCase.is_windows,
+                     'Exception subtype differs')
+    def test_non_existing_dir(self):
+        self.assert_raises_os_error(
+            errno.ENOENT, self.scandir, 'non_existing/fake_dir')
+
+    @unittest.skipIf(not IS_PY2 or not TestCase.is_windows,
+                     'Exception subtype differs')
+    def test_non_existing_dir(self):
+        self.assert_raises_os_error(
+            errno.ESRCH, self.scandir, 'non_existing/fake_dir')
+
 
 class RealScandirTest(FakeScandirTest):
     def use_real_fs(self):