Слушайте изменения в ObservableObject (с Travis CI) - PullRequest
1 голос
/ 21 июня 2020

У меня есть класс, соответствующий ObservableObject, и для целей тестирования я хотел бы слушать, когда объект изменяется. Однако у меня проблема. Вот самый маленький фрагмент, из которого я могу воспроизвести проблему:

import Combine
import XCTest

class FooTests: XCTestCase {
    func testListen() {
        let object = Foo()
        var count = 0
        let sub = object.objectWillChange.sink {
            count += 1
        }     
        object.objectWillChange.send()
        XCTAssertEqual(count, 1)
        sub.cancel()
    }
}

fileprivate final class Foo: ObservableObject {}

Когда я запускаю этот тест локально, он проходит нормально. Однако он не работает, когда он запускается на моем сервере CI (я использую Travis CI), потому что count это 0, а не 1. Я не могу понять причину, по которой это могло произойти из-за разных сред. Могу ли я использовать неправильную версию Combine, и ее поведение изменилось? Или может быть какая-то переменная среды, которая повлияет на это поведение? Или есть другой способ прослушать изменения на object, кроме object.objectWillChange.sink {}, который будет работать? Я не в силах объяснить это, поэтому буду благодарен за любую помощь.

...