为调用异步请求的函数编写单元测试,不返回任何内容

时间:2019-08-01 06:22:41

标签: ios swift unit-testing

这是我的带有函数获取产品的ViewModel调用,我需要测试在内部调用异步请求并设置一些数据的函数

code -r newFile.js

1 个答案:

答案 0 :(得分:0)

因此,您要做的就是设定期望值并等待它

class MyNetworkRequestTests: XCTestCase {
    func testExample() {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
       let expectation = expectation(description: "fetch expectation")
       let url = Bundle(for: type(of: self)).url(forResource: "Listing", withExtension: "json")!
       let data = try! Data(contentsOf: url)
       stub(uri(ProductRouter.fetchByCategory.path), jsonData(data))
       let vm = ViewModel()
       vm.fetchDone = {
            expectation.fullfill()
       }
       vm.fetchProduct()
       waitForExpectations(timeout: 10) { (error) in
             XCTAssertNotNil(vm.sku)
        }
  }
}

在这种情况下,“ fetchDone”将告诉您的viewController数据已经到达。基本上看起来像这样:

class vc: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let viewModel = vm()
        viewModel.fetchDone = {
            self.populate(array: viewModel.array)
        }
    }

    func populate(array: [String]) {

    }
}

class vm: NSObject {
    var fetchDone: (() ->())?
    var array: [String] = [] {
        didSet {
            fetchDone?()
        }
    }

    func fetchProduct() {
        // Do something
        self.array = ["some data"]
    }
}
相关问题