在以下情况中,我面临一些警告问题:
let expect = expectation(description: "Async network call")
SomeManager.executeCall { result in
do {
/// 1.
XCTAssertThrowsError(try CoreManager.method())
expect.fulfill()
} catch {}
}
waitForExpectations(timeout: 15.0, handler: nil)
在1.编译器给出错误
catch块无法访问,因为do block
中没有抛出任何错误
如果我删除了do-catch,则会出现错误:
从投掷函数类型到非投掷函数类型的转换无效...
答案 0 :(得分:0)
对XCTAssertThrowsError
的调用会吞下错误,因此您不需要执行do / catch。
对我来说看起来像个错误。
作为一种解决方法尝试包装像这样的检查功能
func mustThrow() {
XCTAssertThrowsError(try CoreManager.method())
}
然后致电
SomeManager.executeCall { result in
/// 1.
mustThrow()
expect.fulfill()
}
您可以在测试中本地定义函数,以避免污染文件中的名称。
答案 1 :(得分:0)
对于迟来的答复,我感到抱歉,但是为了使<div id="app">
<select v-model="selected">
<option v-for="option in options" v-bind:value="option.value">{{option.text}}</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
let app = new Vue({
el: '#app',
data: {
selected: ['A', 'B', 'C'],
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' },
{ text: 'Any', value: ['A', 'B', 'C'] },
]
}
});
和XCTAssertNoThrow
正常工作(即没有XCTAssertThrowsError
),抛出测试方法必须处于一个障碍之中。 / p>
因此,您的代码将变成,请注意{}:
do{}catch{}