next
Version:
The React Framework
83 lines (82 loc) • 2.67 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
const _posttelemetrypayload = require("./post-telemetry-payload");
describe('postNextTelemetryPayload', ()=>{
let originalFetch;
beforeEach(()=>{
originalFetch = global.fetch;
});
afterEach(()=>{
global.fetch = originalFetch;
});
it('sends telemetry payload successfully', async ()=>{
const mockFetch = jest.fn().mockResolvedValue({
ok: true
});
global.fetch = mockFetch;
const payload = {
meta: {
version: '1.0'
},
context: {
anonymousId: 'test-id',
projectId: 'test-project',
sessionId: 'test-session'
},
events: [
{
eventName: 'test-event',
fields: {
foo: 'bar'
}
}
]
};
await (0, _posttelemetrypayload.postNextTelemetryPayload)(payload);
expect(mockFetch).toHaveBeenCalledWith('https://telemetry.nextjs.org/api/v1/record', {
method: 'POST',
body: JSON.stringify(payload),
headers: {
'content-type': 'application/json'
},
signal: expect.any(AbortSignal)
});
});
it('retries on failure', async ()=>{
const mockFetch = jest.fn().mockRejectedValueOnce(new Error('Network error')).mockResolvedValueOnce({
ok: true
});
global.fetch = mockFetch;
const payload = {
meta: {},
context: {
anonymousId: 'test-id',
projectId: 'test-project',
sessionId: 'test-session'
},
events: []
};
await (0, _posttelemetrypayload.postNextTelemetryPayload)(payload);
expect(mockFetch).toHaveBeenCalledTimes(2);
});
it('swallows errors after retries exhausted', async ()=>{
const mockFetch = jest.fn().mockRejectedValue(new Error('Network error'));
global.fetch = mockFetch;
const payload = {
meta: {},
context: {
anonymousId: 'test-id',
projectId: 'test-project',
sessionId: 'test-session'
},
events: []
};
// Should not throw
await (0, _posttelemetrypayload.postNextTelemetryPayload)(payload);
expect(mockFetch).toHaveBeenCalledTimes(2) // Initial try + 1 retry
;
});
});
//# sourceMappingURL=post-telemetry-payload.test.js.map
;