@sentry/wizard
Version:
Sentry wizard helping you to configure your project
135 lines (105 loc) • 2.96 kB
text/typescript
import {
addSentryInitWithSdkImport,
doesJsCodeIncludeSdkSentryImport,
} from '../../src/react-native/javascript';
describe('react-native javascript', () => {
describe('addSentryInitWithSdkImport', () => {
it('adds sdk import and sentry init under last import in the file', () => {
const input = `import * as React from 'react';
const test = 'test';
import { View } from 'react-native';
const App = () => {
return (
<View>
Test App
</View>
);
};
export default App;`;
const expectedOutput = `import * as React from 'react';
const test = 'test';
import { View } from 'react-native';
import * as Sentry from '@sentry/react-native';
Sentry.init({
dsn: 'dsn',
// uncomment the line below to enable Spotlight (https://spotlightjs.com)
// enableSpotlight: __DEV__,
});
const App = () => {
return (
<View>
Test App
</View>
);
};
export default App;`;
expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(
expectedOutput,
);
});
it('does not add sdk import and sentry init in the file without imports', () => {
const input = `export const test = 'test';`;
expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(input);
});
it('does not add sdk import and sentry init in the empty file', () => {
const input = '';
expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(input);
});
});
describe('doesJsCodeIncludeSdkSentryImport', () => {
it('returns true if code has sdk import', () => {
const input = `import * as React from 'react';
const test = 'test';
import { View } from 'react-native';
import * as Sentry from '@sentry/react-native';
const App = () => {
return (
<View>
Test App
</View>
);
};
export default App;`;
expect(
doesJsCodeIncludeSdkSentryImport(input, {
sdkPackageName: '@sentry/react-native',
}),
).toBe(true);
});
it('returns true if code has sdk require', () => {
const input = `import * as React from 'react';
const test = 'test';
import { View } from 'react-native';
const Sentry = require('@sentry/react-native');
const App = () => {
return (
<View>
Test App
</View>
);
};
export default App;`;
expect(
doesJsCodeIncludeSdkSentryImport(input, {
sdkPackageName: '@sentry/react-native',
}),
).toBe(true);
});
it('returns false if code does not have sdk import', () => {
const input = `export const test = 'test';`;
expect(
doesJsCodeIncludeSdkSentryImport(input, {
sdkPackageName: '@sentry/react-native',
}),
).toBe(false);
});
it('returns false for empty file', () => {
const input = '';
expect(
doesJsCodeIncludeSdkSentryImport(input, {
sdkPackageName: '@sentry/react-native',
}),
).toBe(false);
});
});
});