Swift 如何使用Quick测试我的服务类#异步的

Swift 如何使用Quick测试我的服务类#异步的,swift,quick-nimble,Swift,Quick Nimble,我的问题是测试get服务是否正常工作? 我想在Quick/Nimble(Swift)中使用异步测试的技术 我想知道如何设置和获取测试类的变量?如何测试它?(异步) 正如您在代码中看到的,t_items是测试类的变量。当我测试它时,失败 但是当我在我的服务中测试t_items变量时(生产类),它通过了我在生产类中设置了这个t_items变量,但我不需要它 为什么我不能通过block返回数据? 我错过了什么 谢谢 it("getlist fetches data") { var servi

我的问题是测试get服务是否正常工作? 我想在Quick/Nimble(Swift)中使用异步测试的技术

我想知道如何设置和获取测试类的变量?如何测试它?(异步)

正如您在代码中看到的,t_items测试类的变量。当我测试它时,失败

但是当我在我的服务中测试t_items变量时(生产类),它通过了我在生产类中设置了这个t_items变量,但我不需要它

为什么我不能通过block返回数据? 我错过了什么

谢谢

it("getlist fetches data") {

    var service = Service()

    dispatch_async(dispatch_get_global_queue(0, 0), { () -> Void in
        service.getList("Test", success: { (data) -> Void in

            t_items = data as? NSMutableArray // t_times declared in before each{}

        }, error: { (error) -> Void in

        })
    })

    expect(t_items.count).toEventually(equal(3), timeout:3) // error FAILS
    expect(service.t_items).toEventually(equal(3), timeout: 3)// PASSES

}

除了实际问题之外,您还有一个经典的“数据竞赛”:变量
t_times
将在与
expect
语句不同的线程上访问(修改)
expect
将(大概)访问主线程上的变量,而您的完成处理程序将在其他任意非主线程上运行。不幸的是,
expect
并不能神奇地解决这个问题。您需要确保语句
t_items=data as?NSMutableArray
将设置在同一个线程上,
expect
读取此变量标签,这是主线程。我有一个类似的问题:我将expect()调用放在回调中,它总是通过。我确实希望(数据)=3;expect(data)==7并且它通过了…除了您的实际问题之外,您还有一个经典的“数据竞赛”:变量
t_times
将在与
expect
语句不同的线程上访问(修改)
expect
将(大概)访问主线程上的变量,而您的完成处理程序将在其他任意非主线程上运行。不幸的是,
expect
并不能神奇地解决这个问题。您需要确保语句
t_items=data as?NSMutableArray
将设置在同一个线程上,
expect
读取此变量标签,这是主线程。我有一个类似的问题:我将expect()调用放在回调中,它总是通过。我确实希望(数据)=3;expect(data)==7并且它通过了…除了您的实际问题之外,您还有一个经典的“数据竞赛”:变量
t_times
将在与
expect
语句不同的线程上访问(修改)
expect
将(大概)访问主线程上的变量,而您的完成处理程序将在其他任意非主线程上运行。不幸的是,
expect
并不能神奇地解决这个问题。您需要确保语句
t_items=data as?NSMutableArray
将设置在同一个线程上,
expect
读取此变量标签,这是主线程。我有一个类似的问题:我将expect()调用放在回调中,它总是通过。我确实希望(数据)=3;expect(data)==7并且它通过。。。