diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift
index e584cf1ac3476cd1e6e7b0bdde49a84c0e96e918..51f6092321c0b08fb24729de3e30f55abba10318 100644
--- a/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift
@@ -11,10 +11,10 @@ public struct MessengerDestroy {
 extension MessengerDestroy {
   public static func live(_ env: MessengerEnvironment) -> MessengerDestroy {
     MessengerDestroy {
-      try env.fileManager.removeDirectory(env.storageDir)
       env.ud.set(nil)
       env.e2e.set(nil)
       env.cMix.set(nil)
+      try env.fileManager.removeDirectory(env.storageDir)
     }
   }
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift
index 810214ca651e11048c92a6584389cb697326198e..cfe3f9a51f447c41cf94ae077c71a0b63f3639e3 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift
@@ -13,30 +13,39 @@ final class MessengerDestroyTests: XCTestCase {
 
     var env: MessengerEnvironment = .unimplemented
     env.storageDir = storageDir
-    env.fileManager.removeDirectory = { didRemoveDirectory.append($0) }
     env.ud.set = { didSetUD.append($0) }
     env.e2e.set = { didSetE2E.append($0) }
     env.cMix.set = { didSetCMix.append($0) }
+    env.fileManager.removeDirectory = { didRemoveDirectory.append($0) }
     let destroy: MessengerDestroy = .live(env)
 
     try destroy()
 
-    XCTAssertNoDifference(didRemoveDirectory, [storageDir])
     XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
     XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
     XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
+    XCTAssertNoDifference(didRemoveDirectory, [storageDir])
   }
 
   func testRemoveDirectoryFailure() {
     struct Error: Swift.Error, Equatable {}
     let error = Error()
+    var didSetUD: [UserDiscovery?] = []
+    var didSetE2E: [E2E?] = []
+    var didSetCMix: [CMix?] = []
 
     var env: MessengerEnvironment = .unimplemented
+    env.ud.set = { didSetUD.append($0) }
+    env.e2e.set = { didSetE2E.append($0) }
+    env.cMix.set = { didSetCMix.append($0) }
     env.fileManager.removeDirectory = { _ in throw error }
     let destroy: MessengerDestroy = .live(env)
 
     XCTAssertThrowsError(try destroy()) { err in
       XCTAssertEqual(err as? Error, error)
     }
+    XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
+    XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
+    XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
   }
 }