无法使用参数列表((ErrorType),XMPPError)调用'XCTAssertEqual'

Fre*_*aya 6 xcode ios swift rx-swift

在MyModule中,我有这个枚举:

enum MyError: ErrorType {
    case failToSendMessage
    case notAuthenticated
    case noResponseReceived
}
Run Code Online (Sandbox Code Playgroud)

在MyModuleTests中:

import XCTest
@testable import MyModule

class MyModuleTests: XCTestCase {
    func testNotAuthenticated() {
        myClass.doSomething()
        .subscribeError { error in 
            XCTAssertEqual(error, MyError.notAuthenticated)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

doSomething返回一个Observable.

为什么我收到此错误消息: Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), MyError)

isa*_*gon 8

您应该为MyError添加符合Equatable的扩展名.

extension MyError: Equatable
{
    static func == (lhs: MyError, rhs: MyError) -> Bool {
        switch (lhs, rhs) {
        case (.failToSendMessage, .failToSendMessage):
            return true;

        case (.notAuthenticated, .notAuthenticated):
            return true;

        case (.noResponseReceived, .noResponseReceived):
            return true;

        default:
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,断言你的错误非常简单.

if let error = result.error {
                    XCTAssertTrue(error == MyError.notAuthenticated,"API returns 403");
                } else {
                    XCTFail("Response was not an error");
                }
Run Code Online (Sandbox Code Playgroud)

一世.