Quick / Nimble

A Matcher Framework for Swift and Objective-C
https://quick.github.io/Nimble/documentation/nimble/
Apache License 2.0
4.8k stars 596 forks source link

Error "any AssertionHandler' has no member 'assertionFailure" when running example test #1076

Open molenick opened 1 year ago

molenick commented 1 year ago

What did you do?

  1. Added quick and nimble to my pods file:
    target 'MyTests' do
    inherit! :complete
    pod 'Quick'
    pod 'Nimble'
    end

Is use_frameworks! required?

  1. pod install

  2. Add my test:

    
    import Nimble
    import Quick

class SomeSpec: QuickSpec { override func spec() { describe("Quick nimble config test") { it("has everything you need to get started") { expect(true).to(equal(true)) } } } }


### What did you expect to happen?

The test to build and run.

### What actually happened instead?

I got an error:

.../Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift:81:26 Value of type 'any AssertionHandler' has no member 'assertionFailure'



### Environment

List the software versions you're using:

- Quick: 5.0.1
- Nimble: 10.0.0
- Xcode Version: 14.3.1)
- Swift Version: 5.8.1)

Please also mention which package manager you used and its version. Delete the
other package managers in this list:

- Cocoapods: 1.12.1
molenick commented 1 year ago

If it's useful, I get the same error with just this minimal spec:

import Nimble
import Quick

class MobileTests: QuickSpec {}
molenick commented 1 year ago

I think I figured it out - I wasn't importing XCTest so Nimble's default assertion handler was missing, thus the error.

After adding the import and doing the following:

I got the test to build and run. :)

molenick commented 1 year ago

Scratch that, it works on the first run but subsequent runs re-surface the same issue.

younata commented 1 year ago

Weird. I'm unable to reproduce the issue.

Attached is a zip file of the sample project I'm working with. Incredibly minimal, based off what you provided. Are you doing anything odd with Nimble (like a custom assertion recorder/handler, maybe?) that could help me reproduce?

CocoapodsTestApp.zip

younata commented 1 year ago

Also, I do have to point out that Nimble 10 is more than a year old at this point. I understand the reluctance to upgrade Quick (though, Quick 7 fixes the issues with Quick 6). Nimble 12.2.0 is the current version, so maybe updating might help?

molenick commented 1 year ago

Thanks for taking a look! I ended up getting this working with SPM and Quick 7/Nimble 12. I'm going to try and circle back and try again with CocoaPods and more recent versions and report back.

The versions in my original issue were what I ended up with just adding version-less pods to my podfile. I'll try again with the most recent and see if that was enough to get things going.

molenick commented 1 year ago

Took a look again and got the same results for Quick 7 and Nimble 12 using Cocoapads. This is for a React Native project, my hunch is that there's some friction around the way RN includes pods in targets since @younata's sample app demonstrates there's no issue in quick/nimble itself.

The weird thing for me, which is probably a hint, is that the tests build and run successfully on the first run but fail on every subsequent build. 🤷‍♀️

I think the solution for me is to just include Quick/Nimble in my project using SPM since it's working and doesn't make things too terribly complicated from a dependency management perspective.