AliSoftware / OHHTTPStubs

Stub your network requests easily! Test your apps with fake network data and custom response time, response code and headers!
MIT License
5.03k stars 602 forks source link

Error: product 'OHHTTPStubsSwift' required by package not found. Did you mean 'OHHTTPStubsSwift'? #369

Open komyg opened 5 months ago

komyg commented 5 months ago

New Issue Checklist

Environment

Issue Description

Hi, I am trying to use OHHHTTPStubs in my tests, but they are failing.

Since I am using the Swift Package Manager, I've added OHHTTPStubs as a dependency:

// swift-tools-version: 5.9
import PackageDescription

let package = Package(
  name: "Sdk",
  platforms: [.macOS(.v14), .iOS(.v15)],
  products: [
    .library(
      name: "Sdk",
      targets: ["Sdk"]),
    .executable(
      name: "Example",
      targets: ["SdkExample"]
    ),
  ],
  dependencies: [
    .package(
      url: "https://github.com/AliSoftware/OHHTTPStubs.git", from: "9.0.0"
    )
  ],
  targets: [
    .target(
      name: "Sdk", dependencies: ["Org", "Api"]),
    .executableTarget(
      name: "SdkExample", dependencies: ["Sdk"]
    ),
    .testTarget(
      name: "SdkTests",
      dependencies: ["Sdk", "OHHTTPStubs", "OHHTTPStubsSwift"]),
    .target(name: "Org", dependencies: ["SdkInternal", "Shared"]),
    .target(name: "Api", dependencies: ["SdkInternal", "Shared"]),
    .target(name: "Shared", dependencies: ["SdkInternal"]),
    .target(name: "SdkInternal", dependencies: []),
  ]
)

Then I created a very basic test:

import Foundation
import OHHTTPStubs
import XCTest

@testable import Sdk
@testable import Shared

final class SdkTests: XCTestCase {
  func testExample() async throws {
    stub(condition: isHost("my-api.com")) { _ in
      let stubData = """
        {
          "id": 1,
        }
        """.data(using: .utf8)!
      return OHHTTPStubsResponse(statusCode: 200)
    }

    let sdk = Sdk(baseUrl: "http://my-api.com")

    var params = SdkRequestParams()
    params.headers["Authorization"] = "Bearer token"

    let getByIdResult = try await sdk.org.getById(id: "1", params: params)
    XCTAssertEqual(getByIdResult.metadata.statusCode, 200)
  }
}

However, when I try to run it, I get this error:

error: 'sdk': product 'OHHTTPStubsSwift' required by package 'sdk' target 'SdkTests' not found. Did you mean 'OHHTTPStubsSwift'?

If I remove the import OHHTTPStubsSwift, I get these errors:

error: cannot find 'stub' in scope
    stub(condition: isHost("my-api.com")) { _ in
    ^~~~
error: cannot find 'isHost' in scope
    stub(condition: isHost("my-api.com")) { _ in
                    ^~~~~~
error: cannot find 'OHHTTPStubsResponse' in scope
      return OHHTTPStubsResponse(statusCode: 200)
             ^~~~~~~~~~~~~~~~~~~
error: fatalError

error: fatalError

I am new to Swift. Could you help me?

leoromanovsky commented 4 months ago

In Package.swift:

.testTarget(
            name: "SdkTests",
            dependencies: [
                "Sdk",
                .product(name: "OHHTTPStubs", package: "OHHTTPStubs"),
                .product(name: "OHHTTPStubsSwift", package: "OHHTTPStubs")
            ]
        )

in your unit test:

import OHHTTPStubs
import OHHTTPStubsSwift