Skip to content

Commit 619cb40

Browse files
authored
Escape dependencies to EffectTask.publisher (pointfreeco#1988)
1 parent 1a5876c commit 619cb40

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Sources/ComposableArchitecture/Effects/Publisher.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,16 @@ extension EffectPublisher where Failure == Never {
88
public static func publisher<P: Publisher>(_ createPublisher: @escaping () -> P) -> Self
99
where P.Output == Action, P.Failure == Never {
1010
Self(
11-
operation: .publisher(Deferred(createPublisher: createPublisher).eraseToAnyPublisher())
11+
operation: .publisher(
12+
withEscapedDependencies { continuation in
13+
Deferred {
14+
continuation.yield {
15+
createPublisher()
16+
}
17+
}
18+
}
19+
.eraseToAnyPublisher()
20+
)
1221
)
1322
}
1423
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Combine
2+
import ComposableArchitecture
3+
import XCTest
4+
5+
@MainActor
6+
final class EffectPublisherTests: BaseTCATestCase {
7+
var cancellables: Set<AnyCancellable> = []
8+
9+
func testEscapedDependencies() {
10+
@Dependency(\.date.now) var now
11+
12+
let effect = withDependencies {
13+
$0.date.now = Date(timeIntervalSince1970: 1234567890)
14+
} operation: {
15+
EffectTask.publisher {
16+
Just(now)
17+
}
18+
}
19+
20+
var value: Date?
21+
effect.sink { value = $0 }.store(in: &self.cancellables)
22+
XCTAssertEqual(value, Date(timeIntervalSince1970: 1234567890))
23+
}
24+
}

0 commit comments

Comments
 (0)