Giter VIP home page Giter VIP logo

Comments (6)

picone avatar picone commented on August 17, 2024 1

Thanks gkampitakis, I have resolved my issue.

from go-snaps.

gkampitakis avatar gkampitakis commented on August 17, 2024

Hey 👋 . Thanks a lot for this issue. Could you help me with a reproducible example or more details about your use case ? ( i am not really familiar with the go mock ). I am interested on supporting this use case ( better ?? ) just trying to understand how would that work.

from go-snaps.

picone avatar picone commented on August 17, 2024

Here is a example for the gomock:

func TestHello(t *testing.T) {
  t.Run("some test", func(t *testing.T) {
    ctrl := gomock.NewController(t)

    myStub := NewMockHello(ctrl)
    myStub.EXPECT().DoSomething(gomock.Eq("A"), gomock.Any()).Returns(xxx)
  })
}

myStub will replace the original function implementation, and the function in my code will call myStub.DomeSomething("A", "B"). I need to confirm whether the second argument is "B" instead of using gomock.Any(), so that I need to write myStub.EXPECT().DoSomething(gomock.Eq("A"), gomock.Eq("B")) in my test.
This is the simplest case, but if the argument become complex, I need to snaps it and assert it.
So I wrap a simple gomock.Matcher:

var _ gomock.Matcher = (*mySnaps)(nil)
type mySnaps struct {
  t *testing.T
}

func (s mySnaps) Matches(data any) bool {
  snaps.MatchSnapshot(s.t, data)
  return true
}

func (s mySnaps) String() string {
  return "my-snaps"
}

from go-snaps.

gkampitakis avatar gkampitakis commented on August 17, 2024

That's really clever actually 😅 .
I did a quick test and this seems to work https://github.com/gkampitakis/go-snaps-go-mock, not sure if i miss something.

from go-snaps.

picone avatar picone commented on August 17, 2024

Cool, I get it. So can this be inherited in go-snaps?

from go-snaps.

gkampitakis avatar gkampitakis commented on August 17, 2024

oh okay i misunderstood, so this is not an issue right ?

but the snapDirAndName getting the real path by the caller. So I have to implement my matcher in each package to ensure that the save path of the snaps are correct.

The request is supporting this inside go-snaps?

var _ gomock.Matcher = (*mySnaps)(nil)

type mySnaps struct {
	t *testing.T
}

func EqSnap(t *testing.T) *mySnaps {
	return &mySnaps{t}
}

func (s mySnaps) Matches(data any) bool {
	// this might not be even needed
	s.t.Helper()
	snaps.MatchSnapshot(s.t, data)
	return true
}

func (s mySnaps) String() string {
	return "my-snaps"
}

from go-snaps.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.