带有async/await的Swift/Quick/Nimble无法编译

rjjhvcjd  于 2023-03-28  发布在  Swift
关注(0)|答案(1)|浏览(98)

我正在尝试使用Quick/Nimble编写一个单元测试,测试异步函数,根据Nimble文档:

await expect(await aFunctionReturning1()).to(equal(1))

不幸的是,这行代码对我来说不编译。
环境:

  • xcode 14.2
  • 快速6.1.0
  • 简体中文
  • Swift包中的测试

一个最小的可重复的例子是这样的:

import Quick
import Nimble

struct Foo {
    func bar() async -> String {
        await Task { "Hello World" }.value
    }
}

final class FooSpec: QuickSpec {
    override func spec() {
        describe("A Foo") {
            describe("When calling Bar") {
                var foo: Foo!
                beforeEach {
                    foo = Foo()
                }
                it("Says Hello World") { await expect( await foo.bar()) == "Hello World" }
            }
        }
    }
}

这会导致'async' call in an autoclosure that does not support concurrency,以及另一个我不明白的警告:

我错过了什么?

vhmi4jdf

vhmi4jdf1#

在提出Quick/Nimble github repo的问题后,我得到的反馈表明文档是错误的。
而不是像文档建议的那样使用圆括号:

await expect( await foo.bar()) == "Hello World"

我们应该像这样使用花括号:

await expect { await foo.bar() } == "Hello World"

这一行编译并按预期工作。

相关问题