在单元测试中,如何在没有外部库的情况下断言 PassthroughSubject 值?

On unit test, How does assert the PassthroughSubject value without an external library?

请帮助我,我想测试 viewModel,当我进行 运行 单元测试时出现错误 Asynchronous wait failed: Exceeded timeout of 1 second

var usersSubject = PassthroughSubject<[User],Error>()

    func fetchUsers(){
        let url = URL(string: endpoint.urlString)!
        apiManager.fetchItems(url: url) { (result: Result<[User],Error>)  in
            switch result {
            case .success(let users):
                self.usersSubject.send(users)
            case .failure(let error):
                self.usersSubject.send(completion: .failure(error))
            }
        }
    }
    func testsuccess(){
        viewModel.usersSubject.sink { completion in
            self.exectation.fulfill()
        } receiveValue: { users in
            XCTAssertEqual(1, users.count)
            XCTAssertEqual("Hello World", users[0].name)
            self.exectation.fulfill()
        }
        
        viewModel.fetchUsers()
        XCTAssertEqual(1, apiManager.numberOfCalled)
        
        wait(for: [exectation], timeout: 1.0)
    }

    class StubApiManager: APIManager {
        var numberOfCalled = 0
        override func fetchItems<T>(url: URL, completion: @escaping (Result<[T], Error>) -> Void) where T : Decodable {
            let users = [
            User(id: 1, name: "Hello World")
            ]
            numberOfCalled += 1
            completion(.success(users as! [T]))
        }
    }

您需要在调用viewModel.fetchUsers()之前调用viewModel.usersSubject.sink,以便视图模型调用usersSubject.send时存在订阅。