       keyPath: String,
       values: [T],
       file: StaticString = #file,
-      line: UInt = #line) {
-      let settingExpectation = self.expectation(description: "setting \(keyPath) test finished")
-
-      let runLoop = RunLoop.current
-
-      DispatchQueue.global().async {
-        for value in values {
-          updatable.update(value)
-          usleep(10_000)
-          DispatchQueue.main.sync {
-            XCTAssertEqual(object.value(forKeyPath: keyPath) as? T, value)
-          }
-        }
-
-        settingExpectation.fulfill()
+      line: UInt = #line)
+    {
+      for value in values {
+        updatable.update(value, from: .main)
+        XCTAssertEqual(object.value(forKeyPath: keyPath) as? T, value)
       }
-
-      runLoop.run(until: Date().addingTimeInterval(1.0))
-      self.waitForExpectations(timeout: 0.0)
-
       self.testUpdating(updating: updatable, object: object, keyPath: keyPath, values: values, file: file, line: line)
     }
 

                                 object: object,
                                 keyPath: "text",
                                 values: iOSTests.stringsFixture)
//      self.testUpdatableProperty(updatable: object.rp.attributedText,
//                                 object: object,
//                                 keyPath: "attributedText",
//                                 values: iOSTests.attributedStringsFixture)
    }

    func testUIViewController() {

      values: [T],
      file: StaticString = #file,
      line: UInt = #line)
      where T.AsyncNinjaWrapped: Equatable
    {
      var updatingIterator = updating.makeIterator()
      let _ = updatingIterator.next() // skip an initial value
      for value in values {
        object.setValue(value, forKeyPath: keyPath)
        XCTAssertEqual(updatingIterator.next()?.asyncNinjaOptionalValue, value.asyncNinjaOptionalValue)
      }
    }
  }
  
#endif
