title: Testing behavior of a mocked S3 bucket using s3fs (by dask) is unexpected
body: <p>I have a simple function which adds a file to a base S3 location. The base location is given as an environment variable:</p>
  
  <pre><code>os.environ["TEST_BASE"] = "my-bucket/testing/"
  </code></pre>
  
  <p>The function is:</p>
  
  <pre><code>def add_file(file):
      print(f"In function: {os.getenv('TEST_BASE')}")
      s3 = s3fs.S3FileSystem()
      s3.touch(os.getenv('TEST_BASE') + file)
      print("In function: " + str(s3.ls(os.getenv('TEST_BASE'))))
  </code></pre>
  
  <p>Now, I want to test its behavior:</p>
  
  <pre><code>with mock_s3():
      with unittest.mock.patch.dict(os.environ, {"TEST_BASE": "foo/bar/"}):
          print(f"TEST_BASE = {os.getenv('TEST_BASE')}")
  
          s3_conn = boto3.client('s3', 'us-west-2')
          s3_conn.create_bucket(Bucket='foo')
          s3 = s3fs.S3FileSystem()
          s3.touch(os.getenv('TEST_BASE') + 'yoo')
          print(s3.ls(os.getenv("TEST_BASE")))
          add_file('goo')
          print(s3.exists(os.getenv("TEST_BASE") + 'goo'))  # (*)
          print(s3.ls(os.getenv("TEST_BASE")))  # (**)
  print(f"TEST_BASE = {os.getenv('TEST_BASE')}")
  </code></pre>
  
  <p>Now, the part I cannot understand is that <code>(*)</code> prints <code>True</code> <em>but</em> <code>(**)</code> lists only a single object (<code>yoo</code>). What's going on here?</p>