     }
   }
 
+  func testOptionalArraySuccessfulRequest() {
+    do {
+      let request = try RequestBuilder<[TestModel1]?>().setURLString("\(Params.API.baseURL)/post")
+        .setMethod(.POST).setParams(.json(["array": [
+          ["key": "123"],
+          ["key": "234"],
+          ["key": "345"]
+          ]])).setXPath("json/array").build()
+
+      guard let response = try Gnomon.models(for: request).toBlocking().first() else { throw "can't extract response" }
+
+      expect(response.result).notTo(beNil())
+
+      expect(response.result?.count) == 3
+      expect(response.result?[0].key) == 123
+      expect(response.result?[1].key) == 234
+      expect(response.result?[2].key) == 345
+    } catch {
+      fail("\(error)")
+    }
+  }
+
+  func testOptionalArrayFailedRequest() {
+    do {
+      let request = try RequestBuilder<[TestModel1]?>().setURLString("\(Params.API.baseURL)/post")
+        .setMethod(.POST).setParams(.json(["_": []])).setXPath("json/array").build()
+
+      guard let response = try Gnomon.models(for: request).toBlocking().first() else { throw "can't extract response" }
+      expect(response.result).to(beNil())
+    } catch {
+      fail("\(error)")
+    }
+  }
+
+  func testArrayOfOptionalsSuccessfulRequest() {
+    do {
+      let request = try RequestBuilder<[TestModel1?]>().setURLString("\(Params.API.baseURL)/post")
+        .setMethod(.POST).setParams(.json(["array": [
+          ["key": "123"],
+          ["key": "234"],
+          ["key": "345"]
+        ]])).setXPath("json/array").build()
+
+      guard let response = try Gnomon.models(for: request).toBlocking().first() else { throw "can't extract response" }
+
+      expect(response.result.count) == 3
+      expect(response.result[0]?.key) == 123
+      expect(response.result[1]?.key) == 234
+      expect(response.result[2]?.key) == 345
+    } catch {
+      fail("\(error)")
+    }
+  }
+
+  func testArrayOfOptionalsFailedRequest() {
+    do {
+      let request = try RequestBuilder<[TestModel1?]>().setURLString("\(Params.API.baseURL)/post")
+        .setMethod(.POST).setParams(.json(["array": [
+          ["key": "123"],
+          ["_key": "234"],
+          ["key": "345"]
+        ]])).setXPath("json/array").build()
+
+      guard let response = try Gnomon.models(for: request).toBlocking().first() else { throw "can't extract response" }
+
+      expect(response.result.count) == 3
+      expect(response.result[0]?.key) == 123
+      expect(response.result[1]).to(beNil())
+      expect(response.result[2]?.key) == 345
+    } catch {
+      fail("\(error)")
+    }
+  }
+
   func testSingleGETWithParamsRequest() {
     do {
       let request = try RequestBuilder<TestModel3>()

    }
  }

  func testPlainMultipleRequest() {
    do {
      let request = try RequestBuilder<[TestModel1]>().setURLString("\(Params.API.baseURL)/post")
        .setMethod(.POST).setParams(.json(["array": [

      return
    }
  }

  func testStringRequest() {
    do {
      let request = try RequestBuilder<String>()
        .setURLString("\(Params.API.baseURL)/robots.txt").setMethod(.GET).build()

      guard let response = try Gnomon.models(for: request).toBlocking().first() else {
        throw "can't extract response"
      }

      expect(response.result).to(equal("User-agent: *\nDisallow: /deny\n"))
    } catch {
      fail("\(error)")
      return
    }
  }

