Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(types): add partial flag to mocked TypeScript helper (#1739) #1742

Merged
merged 1 commit into from Aug 2, 2022
Merged

Conversation

jfrs
Copy link
Contributor

@jfrs jfrs commented Jul 29, 2022

I'm not sure about the implementation, happy to get any feedback on this. Closes #1739.

@sheremet-va
Copy link
Member

Maybe it's better to refactor vi.mocked to this? 🤔

vi.mocked(obj, { partial?, deep? })

@jfrs
Copy link
Contributor Author

jfrs commented Jul 31, 2022

Something like this?

public mocked<T>(item: T, deep?: false): MaybeMocked<T>
public mocked<T>(item: T, deep: true): MaybeMockedDeep<T>
public mocked<T>(item: T, options: { partial?: false; deep?: false }): MaybeMocked<T>
public mocked<T>(item: T, options: { partial?: false; deep: true }): MaybeMockedDeep<T>
public mocked<T>(item: T, options: { partial: true; deep?: false }): MaybePartiallyMocked<T>
public mocked<T>(item: T, options: { partial: true; deep: true }): MaybePartiallyMockedDeep<T>
public mocked<T>(item: T, _options = {}): MaybeMocked<T> {
  return item as any
}

I'm not sure why _options = {} works, but it seems to accept all the different combinations:

  • Will return MockedFunction
vi.mocked(mockFactory)
vi.mocked(mockFactory, false)
vi.mocked(mockFactory, {})
vi.mocked(mockFactory, { deep: false })
vi.mocked(mockFactory, { partial: false })
vi.mocked(mockFactory, { partial: false, deep: false })
  • Will return MockedFunctionDeep
vi.mocked(mockFactory, true)
vi.mocked(mockFactory, { deep: true })
vi.mocked(mockFactory, { partial: false, deep: true }
  • Will return PartiallyMockedFunction
vi.mocked(mockFactory, { partial: true })
vi.mocked(mockFactory, { partial: true, deep: false })
  • Will return PartiallyMockedFunctionDeep
vi.mocked(mockFactory, { partial: true, deep: true })

@sheremet-va
Copy link
Member

Something like this?

Yes, something like this 😄

@jfrs jfrs changed the title feat(types): add partiallyMocked TypeScript helper (#1739) feat(types): add partial flag to mocked TypeScript helper (#1739) Jul 31, 2022
@sheremet-va sheremet-va merged commit c18f0af into vitest-dev:main Aug 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Partial types for mocked return values
3 participants