2016-10-11 3 views
5

In MyModule, ich habe diese Enum:Kann nicht aufrufen 'XCTAssertEqual' mit einer Argumentliste ((Errortype), XMPPError)

enum MyError: ErrorType { 
    case failToSendMessage 
    case notAuthenticated 
    case noResponseReceived 
} 

In MyModuleTests:

import XCTest 
@testable import MyModule 

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

doSomething eine Observable zurückgibt.

Warum bekomme ich diese Fehlermeldung: ?

+0

welche Art von Aufgabe wird durch subscribeError zurück ?? ich meine das "Fehler" -Objekt? – user3608500

+0

(Edited die Frage) Der Typ des Fehlerobjekt ist ein 'MyError', die eine' ErrorType' zu ​​ –

Antwort

6

Sie sollten eine Erweiterung hinzufügen gleichzusetzen für Ihre MyError konform .

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; 
     } 
    } 
} 

Und dann ist es ziemlich einfach, Ihren Fehler zu bestätigen.

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

I.

0

Wie der Fehler schon sagt, hier Sie versuchen (ErrorType) mit MyError vergleichen XCTAssertEqual

1.Überprüfen mit, warum Sie Fehler als (ErrorType) statt ErrorType

2.Try Vergleich nach der Konvertierung (Typ gegossen werden immer) ErrorType bis MyError Fehler.

+0

1. Ich kann nicht finden, wie ich '(Errortype)' statt 'ErrorType' 2. Beim Typ-Casting wird der Fehler in "Kann nicht mit einer Argumentliste ((ErrorType), ErrorType)' 'XCTAssertEqual" aufgerufen " –

0

Es stellt sich heraus, kann Errortype nicht direkt miteinander verglichen werden:

XCTAssertEqual(error, MyError.notAuthenticated as ErrorType) 
// Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), ErrorType) 

XCTAssert(error == (MyError.notAuthenticated as ErrorType)) 
// Binary operator '==' cannot be applied to two 'ErrorType' operands 

die gleiche Sache zu erreichen, ich habe dies:

 switch error { 
     case MyError.notAuthenticated: 
      () 
     default: 
      XCTFail() 
     } 
Verwandte Themen