【发布时间】:2021-05-19 11:26:32
【问题描述】:
我正在学习如何为我的 API 请求编写测试,但在设置测试的完成代码和响应模型时遇到了问题。
我尝试使用 UserResponse 的一个实例(让 userResponse = UserResponse() ),但是它需要一个初始化器的值(来自:解码器),我不知道里面有什么。我得到的错误是:
"Argument type 'Decoder.Protocol' does not conform to expected type 'Decoder'"
另外,我在创建测试的完成处理程序时出错,我正在使用新的 Swift Result 类型 (Result
"Type of expression is ambiguous without more context"
这是一个@escaping 函数,但我收到一条错误消息,提示要在测试中删除@escaping。
关于什么是错的任何想法?下面的故障码我已经用cmets标记了。
谢谢!
// APP CODE
class SignupViewModel: ObservableObject {
func createAccount(user: UserSignup, completion: @escaping( Result<UserResponse, Error>) -> Void) {
AuthService.createAccount(user: user, completion: completion)
}
}
struct UserSignup: Encodable {
var username: String
var email: String
var password: String
}
struct UserResponse: Decodable {
var user: User
var token: String
}
struct User: Decodable {
var username: String
var email: String
// etc
{ private enum UserKeys }
init(from decoder: Decoder) throws { container / decode code }
}
// TEST CODE
class SignupViewModelTests: XCTestCase {
var sut: SignupViewModel!
override func setUpWithError() throws {
sut = SignupViewModel()
}
override func tearDownWithError() throws {
sut = nil
}
func testCreateAccount_WhenGivenSuccessfulResponse_ReturnsSuccess() {
let userSignup = UserSignup(username: "johnsmith", email: "john@test.com", password: "abc123abc")
// WHAT GOES IN from:??
let userResponse = UserResponse(from: Decoder)
// ERROR: "Type of expression is ambiguous without more context"??
func testCreateAccount_WhenGivenSuccessfulResponse_ReturnsSuccess() {
//arrange
let userSignup = UserSignup(username: "johnsmith", email: "john@test.com", password: "abc123abc")
sut.createAccount(user: UserSignup, completion: ( Result <UserResponse, Error> ) -> Void ) {
XCTAssertEqual(UserResponse.user.username, "johnsmith")
}
}
}
}
【问题讨论】:
标签: ios swift xcode tdd xctest