创建用于测试的 HTTPCookieStorage

Create HTTPCookieStorage for testing

我正在尝试对我的一些网络代码进行单元测试。我正在尝试编写一个测试来验证来自给定 HTTPCookieStorageHTTPCookies 实际上已添加到 URLRequest headers.

所以,我需要一个 HTTPCookieStorage 里面有一个 HTTPCookie。我尝试这样创建它:

let cookie = HTTPCookie(properties: [
    .name: "name",
    .value: "value",
    .domain: ".example.com",
    .path: "/",
    .expires: Date(timeIntervalSinceNow: 10),
    .comment: "Test cookie"
])!

let url = URL(string: "www.example.com")!

let cookieStorage = HTTPCookieStorage()
cookieStorage.cookieAcceptPolicy = .always
cookieStorage.setCookies([someCookie], for: url, mainDocumentURL: nil)

但此时 cookieStorage 仍然是空的..我也试过:

cookieStorage.setCookie(cookie)

这也忽略了 cookie..

为什么 cookie 被忽略,我如何创建一个 HTTPCookieStorage 带有可预测 cookie 的单元测试?

我建议使用 HTTPCookieStorageshared 实例。另外,如果你使用 setCookie(_:) 它应该可以工作:

let cookie = HTTPCookie(properties: [
    .name: "name",
    .value: "value",
    .domain: ".example.com",
    .path: "/",
    .expires: Date(timeIntervalSinceNow: 10),
    .comment: "Test cookie"
])!

let cs = HTTPCookieStorage.shared
cs.setCookie(cookie)
print(cs.cookies!)
/*
 [<NSHTTPCookie
     version:0
     name:name
     value:value
     expiresDate:'2021-09-30 10:08:16 +0000'
     created:'2021-09-30 10:08:06 +0000'
     sessionOnly:FALSE
     domain:.example.com
     partition:none
     sameSite:none
     path:/
     isSecure:FALSE
  path:"/" isSecure:FALSE    comment:'Test cookie'
 >]
 */
/**
    @class NSHTTPCookieStorage 
    @discussion NSHTTPCookieStorage implements a singleton object (shared
    instance) which manages the shared cookie store.  It has methods
    to allow clients to set and remove cookies, and get the current
    set of cookies.  It also has convenience methods to parse and
    generate cookie-related HTTP header fields.
*/

使用HTTPCookieStorage.sharedHTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier identifier: String)