I call rest web servic with completion handler and if succeed I send NSNotification.
The problem is how to write unit test to assert that the notification is sent in case of success.
Any help will be appreciated.
I call rest web servic with completion handler and if succeed I send NSNotification.
The problem is how to write unit test to assert that the notification is sent in case of success.
Any help will be appreciated.
You can add an expectation for the notification:
expectationForNotification("BlaBlaNotification", object: nil) { (notification) -> Bool in
// call the method that fetches the data
sut.fetchData()
waitForExpectationsWithTimeout(5, handler: nil)
But personally I would split this is two tests. One for the fetching of the data (tested using a stub) and one for the sending of the notification.
sut
is short for system under test
. –
Chauvin This is how I test notifications:
func testDataFetched() {
weak var expectation = self.expectation(description: "testDataFetched")
//set the notification name to whatever you called it
NotificationCenter.default.addObserver(forName: NSNotification.Name("dataWasFetched"), object: nil, queue: nil) { notification in
//if we got here, it means we got our notification within the timeout limit
//optional: verify userInfo in the notification if it has any
//call fulfill and your test will succeed; otherwise it will fail
expectation?.fulfill()
}
//call your data fetch here
sut.fetchData()
//you must call waitForExpectations or your test will 'succeed'
// before the notification can be received!
// also, set the timeout long enough for your data fetch to complete
waitForExpectations(timeout: 1.0, handler: nil)
}
© 2022 - 2024 — McMap. All rights reserved.
async invocations
– Phraseogram