test: Add test fixtures & implement testDatasource
for tag
#9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request
🤨 Rationale
Writing unit tests for data sources is a little tricky because requests are made by the
BackendSrv
instance retrieved from agetBackendSrv()
call. This PR adds some fixtures to make test specs cleaner and implements the tag'stestDatasource
method as an example.👩💻 Implementation
I really wanted to use Mock Service Worker, so that we could mock routes at the network level, but the
BackendSrv
implementation is apart of Grafana's unpackaged code, so we have to mock it out.Previously, we were using
jest.mock
to monkey patch the @grafana/runtime module, but it only applies to the file that called it, so it's difficult to refactor. Instead, we can just inject theBackendSrv
in DataSource's constructors. Then jest-mock-extended does a lot of the heavy lifting, letting us create a type-safe mock of theBackendSrv
interface. The mock even comes with acalledWith()
extension, so we can verify that the correct route is called.🧪 Testing
This is self-explanatory 😄
✅ Checklist