How to use stringified method in storybook-root

Best JavaScript code snippet using storybook-root

types.ts

Source:types.ts Github

copy

Full Screen

1/* tslint:disable */2import { LimitOrderFields, Signature } from '@0x/protocol-utils';3import { SignedOrder } from '@0x/types';4import { BigNumber } from '@0x/utils';5export interface StringifiedSignedOrder {6 makerAddress: string;7 makerAssetData: string;8 makerAssetAmount: string;9 makerFee: string;10 makerFeeAssetData: string;11 takerAddress: string;12 takerAssetData: string;13 takerFeeAssetData: string;14 takerAssetAmount: string;15 takerFee: string;16 senderAddress: string;17 feeRecipientAddress: string;18 expirationTimeSeconds: string;19 salt: string;20 exchangeAddress: string;21 chainId: string;22 signature: string;23}24export interface AddOrdersOpts {25 keepCancelled?: boolean;26 keepExpired?: boolean;27 keepFullyFilled?: boolean;28 keepUnfunded?: boolean;29}30export interface StatsResponse {31 stats: StringifiedStats;32}33export type GenericOrderWithMetadata = OrderWithMetadata | OrderWithMetadataV4;34export type GenericStringifiedOrderWithMetadata = StringifiedOrderWithMetadata | StringifiedOrderWithMetadataV4;35export type GenericSignedOrder = SignedOrder | SignedOrderV4;36export type GenericStringifiedSignedOrders = StringifiedSignedOrder | StringifiedSignedOrderV4;37export interface AddOrdersResponse<38 T extends GenericStringifiedOrderWithMetadata,39 K extends GenericStringifiedSignedOrders40> {41 addOrders: StringifiedAddOrdersResults<T, K>;42}43export interface AddOrdersResponseV4<44 T extends GenericStringifiedOrderWithMetadata,45 K extends GenericStringifiedSignedOrders46> {47 addOrdersV4: StringifiedAddOrdersResults<T, K>;48}49export interface OrderResponse {50 order: StringifiedOrderWithMetadata | null;51}52export interface OrderResponseV4 {53 orderv4: StringifiedOrderWithMetadataV4 | null;54}55export interface OrdersResponse {56 orders: StringifiedOrderWithMetadata[];57}58export interface OrdersResponseV4 {59 ordersv4: StringifiedOrderWithMetadataV4[];60}61export interface OrderEventResponse {62 orderEvents: StringifiedOrderEvent[];63}64export interface Stats {65 version: string;66 pubSubTopic: string;67 rendezvous: string;68 secondaryRendezvous: string[];69 peerID: string;70 ethereumChainID: number;71 latestBlock: LatestBlock;72 numPeers: number;73 numOrders: number;74 numOrdersV4: number;75 numOrdersIncludingRemoved: number;76 numOrdersIncludingRemovedV4: number;77 numPinnedOrders: number;78 numPinnedOrdersV4: number;79 maxExpirationTime: BigNumber;80 startOfCurrentUTCDay: Date;81 ethRPCRequestsSentInCurrentUTCDay: number;82 ethRPCRateLimitExpiredRequests: number;83}84export interface LatestBlock {85 number: BigNumber;86 hash: string;87}88export interface OrderWithMetadata extends SignedOrder {89 hash: string;90 fillableTakerAssetAmount: BigNumber;91}92export type OrderV4 = LimitOrderFields;93export type SignedOrderV4 = OrderV4 & { signature: Signature };94export interface OrderWithMetadataV4 extends SignedOrderV4 {95 hash: string;96 fillableTakerAssetAmount: BigNumber;97}98export interface AddOrdersResults<T extends GenericOrderWithMetadata, K extends GenericSignedOrder> {99 // The set of orders that were accepted. Accepted orders will be watched and order events will be emitted if100 // their status changes.101 accepted: AcceptedOrderResult<T>[];102 // The set of orders that were rejected, including the reason they were rejected. Rejected orders will not be103 // watched.104 rejected: RejectedOrderResult<K>[];105}106export interface AcceptedOrderResult<T extends GenericOrderWithMetadata> {107 // The order that was accepted, including metadata.108 // OrderWithMetadata109 order: T;110 // Whether or not the order is new. Set to true if this is the first time this Mesh node has accepted the order111 // and false otherwise.112 isNew: boolean;113}114export interface RejectedOrderResult<K extends GenericSignedOrder> {115 // The hash of the order. May be null if the hash could not be computed.116 hash?: string;117 // The order that was rejected.118 // SIgnedOrder119 order: K;120 // A machine-readable code indicating why the order was rejected. This code is designed to121 // be used by programs and applications and will never change without breaking backwards-compatibility.122 code: RejectedOrderCode;123 // A human-readable message indicating why the order was rejected. This message may change124 // in future releases and is not covered by backwards-compatibility guarantees.125 message: string;126}127export enum RejectedOrderCode {128 EthRpcRequestFailed = 'ETH_RPC_REQUEST_FAILED',129 OrderHasInvalidMakerAssetAmount = 'ORDER_HAS_INVALID_MAKER_ASSET_AMOUNT',130 OrderHasInvalidTakerAssetAmount = 'ORDER_HAS_INVALID_TAKER_ASSET_AMOUNT',131 OrderExpired = 'ORDER_EXPIRED',132 OrderFullyFilled = 'ORDER_FULLY_FILLED',133 OrderCancelled = 'ORDER_CANCELLED',134 OrderUnfunded = 'ORDER_UNFUNDED',135 OrderHasInvalidMakerAssetData = 'ORDER_HAS_INVALID_MAKER_ASSET_DATA',136 OrderHasInvalidMakerFeeAssetData = 'ORDER_HAS_INVALID_MAKER_FEE_ASSET_DATA',137 OrderHasInvalidTakerAssetData = 'ORDER_HAS_INVALID_TAKER_ASSET_DATA',138 OrderHasInvalidTakerFeeAssetData = 'ORDER_HAS_INVALID_TAKER_FEE_ASSET_DATA',139 OrderHasInvalidSignature = 'ORDER_HAS_INVALID_SIGNATURE',140 OrderMaxExpirationExceeded = 'ORDER_MAX_EXPIRATION_EXCEEDED',141 InternalError = 'INTERNAL_ERROR',142 MaxOrderSizeExceeded = 'MAX_ORDER_SIZE_EXCEEDED',143 OrderAlreadyStoredAndUnfillable = 'ORDER_ALREADY_STORED_AND_UNFILLABLE',144 OrderForIncorrectChain = 'ORDER_FOR_INCORRECT_CHAIN',145 IncorrectExchangeAddress = 'INCORRECT_EXCHANGE_ADDRESS',146 SenderAddressNotAllowed = 'SENDER_ADDRESS_NOT_ALLOWED',147 DatabaseFullOfOrders = 'DATABASE_FULL_OF_ORDERS',148 TakerAddressNotAllowed = 'TAKER_ADDRESS_NOT_ALLOWED',149}150export interface OrderEvent {151 timestampMs: number;152 order?: OrderWithMetadata;153 orderv4?: OrderWithMetadataV4;154 endState: OrderEventEndState;155 contractEvents: ContractEvent[];156}157export interface ContractEvent {158 blockHash: string;159 txHash: string;160 txIndex: number;161 logIndex: number;162 isRemoved: boolean;163 address: string;164 kind: ContractEventKind;165 // TODO(albrow): Use a union type for parameters?166 parameters: any;167}168export enum ContractEventKind {169 ERC20TransferEvent = 'ERC20TransferEvent',170 ERC20ApprovalEvent = 'ERC20ApprovalEvent',171 ERC721TransferEvent = 'ERC721TransferEvent',172 ERC721ApprovalEvent = 'ERC721ApprovalEvent',173 ERC721ApprovalForAllEvent = 'ERC721ApprovalForAllEvent',174 ERC1155ApprovalForAllEvent = 'ERC1155ApprovalForAllEvent',175 ERC1155TransferSingleEvent = 'ERC1155TransferSingleEvent',176 ERC1155TransferBatchEvent = 'ERC1155TransferBatchEvent',177 ExchangeFillEvent = 'ExchangeFillEvent',178 ExchangeCancelEvent = 'ExchangeCancelEvent',179 ExchangeCancelUpToEvent = 'ExchangeCancelUpToEvent',180 WethDepositEvent = 'WethDepositEvent',181 WethWithdrawalEvent = 'WethWithdrawalEvent',182}183export enum OrderEventEndState {184 // The order was successfully validated and added to the Mesh node. The order is now being watched and any changes to185 // the fillability will result in subsequent order events.186 Added = 'ADDED',187 // The order was filled for a partial amount. The order is still fillable up to the fillableTakerAssetAmount.188 Filled = 'FILLED',189 // The order was fully filled and its remaining fillableTakerAssetAmount is 0. The order is no longer fillable.190 FullyFilled = 'FULLY_FILLED',191 // The order was cancelled and is no longer fillable.192 Cancelled = 'CANCELLED',193 // The order expired and is no longer fillable.194 Expired = 'EXPIRED',195 // Catch all 'Invalid' state when invalid orders are submitted.196 Invalid = 'INVALID',197 // The order was previously expired, but due to a block re-org it is no longer considered expired (should be rare).198 Unexpired = 'UNEXPIRED',199 // The order has become unfunded and is no longer fillable. This can happen if the maker makes a transfer or changes their allowance.200 Unfunded = 'UNFUNDED',201 // The fillability of the order has increased. This can happen if a previously processed fill event gets reverted due to a block re-org,202 // or if a maker makes a transfer or changes their allowance.203 FillabilityIncreased = 'FILLABILITY_INCREASED',204 // The order is potentially still valid but was removed for a different reason (e.g.205 // the database is full or the peer that sent the order was misbehaving). The order will no longer be watched206 // and no further events for this order will be emitted. In some cases, the order may be re-added in the207 // future.208 StoppedWatching = 'STOPPED_WATCHING',209}210export type OrderField = Extract<keyof OrderWithMetadata, string>;211export enum SortDirection {212 Asc = 'ASC',213 Desc = 'DESC',214}215export enum FilterKind {216 Equal = 'EQUAL',217 NotEqual = 'NOT_EQUAL',218 Greater = 'GREATER',219 GreaterOrEqual = 'GREATER_OR_EQUAL',220 Less = 'LESS',221 LessOrEqual = 'LESS_OR_EQUAL',222}223export interface OrderSort {224 field: OrderField;225 direction: SortDirection;226}227export interface OrderFilter {228 field: OrderField;229 kind: FilterKind;230 value: OrderWithMetadata[OrderField];231}232export interface OrderQuery {233 filters?: OrderFilter[];234 sort?: OrderSort[];235 limit?: number;236}237export interface StringifiedLatestBlock {238 number: string;239 hash: string;240}241export interface StringifiedStats {242 version: string;243 pubSubTopic: string;244 rendezvous: string;245 secondaryRendezvous: string[];246 peerID: string;247 ethereumChainID: number;248 latestBlock: StringifiedLatestBlock;249 numPeers: number;250 numOrders: number;251 numOrdersV4: number;252 numOrdersIncludingRemoved: number;253 numOrdersIncludingRemovedV4: number;254 numPinnedOrders: number;255 numPinnedOrdersV4: number;256 maxExpirationTime: string;257 startOfCurrentUTCDay: string;258 ethRPCRequestsSentInCurrentUTCDay: number;259 ethRPCRateLimitExpiredRequests: number;260}261export interface StringifiedSignedOrder {262 chainId: string;263 exchangeAddress: string;264 makerAddress: string;265 takerAddress: string;266 feeRecipientAddress: string;267 senderAddress: string;268 makerAssetAmount: string;269 takerAssetAmount: string;270 makerFee: string;271 takerFee: string;272 expirationTimeSeconds: string;273 salt: string;274 makerAssetData: string;275 takerAssetData: string;276 makerFeeAssetData: string;277 takerFeeAssetData: string;278 signature: string;279}280export interface StringifiedSignedOrderV4 {281 chainId: string;282 verifyingContract: string;283 makerToken: string;284 takerToken: string;285 makerAmount: string;286 takerAmount: string;287 takerTokenFeeAmount: string;288 maker: string;289 taker: string;290 sender: string;291 feeRecipient: string;292 pool: string;293 expiry: string;294 salt: string;295 signatureType: string;296 signatureR: string;297 signatureS: string;298 signatureV: string;299}300export interface StringifiedOrderWithMetadataV4 extends StringifiedSignedOrderV4 {301 hash: string;302 fillableTakerAssetAmount: string;303}304export interface StringifiedOrderWithMetadata extends StringifiedSignedOrder {305 hash: string;306 fillableTakerAssetAmount: string;307}308export interface StringifiedAddOrdersResults<309 T extends GenericStringifiedOrderWithMetadata,310 K extends GenericStringifiedSignedOrders311> {312 accepted: StringifiedAcceptedOrderResult<T>[];313 rejected: StringifiedRejectedOrderResult<K>[];314}315export interface StringifiedAcceptedOrderResult<T extends GenericStringifiedOrderWithMetadata> {316 order: T;317 isNew: boolean;318}319export interface StringifiedRejectedOrderResult<K extends GenericStringifiedSignedOrders> {320 hash?: string;321 order: K;322 code: RejectedOrderCode;323 message: string;324}325export interface StringifiedOrderEvent {326 timestamp: string;327 order: StringifiedOrderWithMetadata | null;328 orderv4: StringifiedOrderWithMetadataV4 | null;329 endState: OrderEventEndState;330 fillableTakerAssetAmount: BigNumber;331 contractEvents: ContractEvent[];332}333/**334 * Converts StringifiedStats to Stats335 */336export function fromStringifiedStats(stats: StringifiedStats): Stats {337 return {338 ...stats,339 latestBlock: fromStringifiedLatestBlock(stats.latestBlock),340 maxExpirationTime: new BigNumber(stats.maxExpirationTime),341 startOfCurrentUTCDay: new Date(stats.startOfCurrentUTCDay),342 };343}344/**345 * Converts StringifiedLatestBlock to LatestBlock346 */347export function fromStringifiedLatestBlock(latestBlock: StringifiedLatestBlock): LatestBlock {348 return {349 ...latestBlock,350 number: new BigNumber(latestBlock.number),351 };352}353/**354 * Converts SignedOrder to StringifiedSignedOrder355 */356export function toStringifiedSignedOrder(order: SignedOrder): StringifiedSignedOrder {357 return {358 ...order,359 chainId: order.chainId.toString(),360 makerAssetAmount: order.makerAssetAmount.toString(),361 takerAssetAmount: order.takerAssetAmount.toString(),362 makerFee: order.makerFee.toString(),363 takerFee: order.takerFee.toString(),364 expirationTimeSeconds: order.expirationTimeSeconds.toString(),365 salt: order.salt.toString(),366 };367}368/**369 * Converts SignedOrderV4 to StringifiedSignedOrderV4370 */371export function toStringifiedSignedOrderV4(order: SignedOrderV4): StringifiedSignedOrderV4 {372 const stringifiedOrder: any = {373 ...order,374 chainId: order.chainId.toString(),375 makerAmount: order.makerAmount.toString(),376 takerAmount: order.takerAmount.toString(),377 takerTokenFeeAmount: order.takerTokenFeeAmount.toString(),378 expiry: order.expiry.toString(),379 salt: order.salt.toString(),380 signatureType: order.signature.signatureType.toString(),381 signatureV: order.signature.v.toString(),382 signatureR: order.signature.r.toString(),383 signatureS: order.signature.s.toString(),384 };385 delete stringifiedOrder.signature;386 return stringifiedOrder;387}388/**389 * Converts StringifiedOrderWithMetadata to OrderWithMetadata390 */391export function fromStringifiedOrderWithMetadata(order: StringifiedOrderWithMetadata): OrderWithMetadata {392 return {393 ...order,394 // tslint:disable-next-line: custom-no-magic-numbers395 chainId: Number.parseInt(order.chainId, 10),396 makerAssetAmount: new BigNumber(order.makerAssetAmount),397 takerAssetAmount: new BigNumber(order.takerAssetAmount),398 makerFee: new BigNumber(order.makerFee),399 takerFee: new BigNumber(order.takerFee),400 expirationTimeSeconds: new BigNumber(order.expirationTimeSeconds),401 salt: new BigNumber(order.salt),402 fillableTakerAssetAmount: new BigNumber(order.fillableTakerAssetAmount),403 };404}405/**406 * Converts StringifiedOrderWithMetadata to OrderWithMetadata407 */408export function fromStringifiedOrderWithMetadataV4(order: StringifiedOrderWithMetadataV4): OrderWithMetadataV4 {409 const { signatureType, signatureV, signatureR, signatureS, ...orderRest } = order;410 return {411 ...orderRest,412 // tslint:disable-next-line: custom-no-magic-numbers413 chainId: Number.parseInt(order.chainId, 10),414 makerAmount: new BigNumber(order.makerAmount),415 takerAmount: new BigNumber(order.takerAmount),416 takerTokenFeeAmount: new BigNumber(order.takerTokenFeeAmount),417 expiry: new BigNumber(order.expiry),418 fillableTakerAssetAmount: new BigNumber(order.fillableTakerAssetAmount),419 signature: {420 // tslint:disable-next-line: custom-no-magic-numbers421 signatureType: parseInt(signatureType, 10),422 // tslint:disable-next-line: custom-no-magic-numbers423 v: parseInt(signatureV, 10),424 r: signatureR,425 s: signatureS,426 },427 salt: new BigNumber(order.salt),428 };429}430/**431 * Converts StringifiedSignedOrder to SignedOrder432 */433export function fromStringifiedSignedOrder(order: StringifiedSignedOrder): SignedOrder {434 return {435 ...order,436 // tslint:disable-next-line: custom-no-magic-numbers437 chainId: Number.parseInt(order.chainId, 10),438 makerAssetAmount: new BigNumber(order.makerAssetAmount),439 takerAssetAmount: new BigNumber(order.takerAssetAmount),440 makerFee: new BigNumber(order.makerFee),441 takerFee: new BigNumber(order.takerFee),442 expirationTimeSeconds: new BigNumber(order.expirationTimeSeconds),443 salt: new BigNumber(order.salt),444 };445}446/**447 * Converts StringifiedSignedOrderV4 to SignedOrderV4448 */449export function fromStringifiedSignedOrderV4(order: StringifiedSignedOrderV4): SignedOrderV4 {450 return {451 ...order,452 // tslint:disable-next-line: custom-no-magic-numbers453 chainId: Number.parseInt(order.chainId, 10),454 makerAmount: new BigNumber(order.makerAmount),455 takerAmount: new BigNumber(order.takerAmount),456 takerTokenFeeAmount: new BigNumber(order.takerTokenFeeAmount),457 expiry: new BigNumber(order.expiry),458 signature: {459 signatureType: parseInt(order.signatureType, 10),460 v: parseInt(order.signatureV, 16),461 r: order.signatureR,462 s: order.signatureS,463 },464 salt: new BigNumber(order.salt),465 };466}467/**468 * Converts StringifiedAddOrdersResults to AddOrdersResults469 */470export function fromStringifiedAddOrdersResults(471 results: StringifiedAddOrdersResults<StringifiedOrderWithMetadata, StringifiedSignedOrder>,472): AddOrdersResults<OrderWithMetadata, SignedOrder> {473 return {474 accepted: results.accepted.map(fromStringifiedAcceptedOrderResult),475 rejected: results.rejected.map(fromStringifiedRejectedOrderResult),476 };477}478/**479 * Converts StringifiedAddOrdersResults to AddOrdersResults480 */481export function fromStringifiedAddOrdersResultsV4(482 results: StringifiedAddOrdersResults<StringifiedOrderWithMetadataV4, StringifiedSignedOrderV4>,483): AddOrdersResults<OrderWithMetadataV4, SignedOrderV4> {484 return {485 accepted: results.accepted.map(fromStringifiedAcceptedOrderResultV4),486 rejected: results.rejected.map(fromStringifiedRejectedOrderResultV4),487 };488}489/**490 * Converts StringifiedAcceptedOrderResult to AcceptedOrderResult491 */492export function fromStringifiedAcceptedOrderResult(493 acceptedResult: StringifiedAcceptedOrderResult<StringifiedOrderWithMetadata>,494): AcceptedOrderResult<OrderWithMetadata> {495 return {496 ...acceptedResult,497 order: fromStringifiedOrderWithMetadata(acceptedResult.order),498 };499}500/**501 * Converts StringifiedAcceptedOrderResult to AcceptedOrderResult502 */503export function fromStringifiedAcceptedOrderResultV4(504 acceptedResult: StringifiedAcceptedOrderResult<StringifiedOrderWithMetadataV4>,505): AcceptedOrderResult<OrderWithMetadataV4> {506 return {507 ...acceptedResult,508 order: fromStringifiedOrderWithMetadataV4(acceptedResult.order),509 };510}511/**512 * Converts StringifiedRejectedOrderResult to RejectedOrderResult513 */514export function fromStringifiedRejectedOrderResult(515 rejectedResult: StringifiedRejectedOrderResult<StringifiedSignedOrder>,516): RejectedOrderResult<SignedOrder> {517 return {518 ...rejectedResult,519 order: fromStringifiedSignedOrder(rejectedResult.order),520 };521}522/**523 * Converts StringifiedRejectedOrderResultV4 to RejectedOrderResultV4524 */525export function fromStringifiedRejectedOrderResultV4(526 rejectedResult: StringifiedRejectedOrderResult<StringifiedSignedOrderV4>,527): RejectedOrderResult<SignedOrderV4> {528 return {529 ...rejectedResult,530 order: fromStringifiedSignedOrderV4(rejectedResult.order),531 };532}533/**534 * Converts StringifiedOrderEvent to OrderEvent535 */536export function fromStringifiedOrderEvent(event: StringifiedOrderEvent): OrderEvent {537 return {538 ...event,539 timestampMs: new Date(event.timestamp).getUTCMilliseconds(),540 order: event.order ? fromStringifiedOrderWithMetadata(event.order) : undefined,541 orderv4: event.orderv4 ? fromStringifiedOrderWithMetadataV4(event.orderv4) : undefined,542 };543}544/**545 * Converts filter.value the the appropriate JSON/GraphQL type (e.g. BigNumber gets converted to string).546 */547export function convertFilterValue(filter: OrderFilter): OrderFilter {548 return {549 ...filter,550 value: BigNumber.isBigNumber(filter.value) ? filter.value.toString() : filter.value,551 };...

Full Screen

Full Screen

format-test-results.spec.ts

Source:format-test-results.spec.ts Github

copy

Full Screen

1import { Options } from '../../../../../../src/lib/types';2import * as fs from 'fs';3import { extractDataToSendFromResults } from '../../../../../../src/lib/formatters/test/format-test-results';4describe('extractDataToSendFromResults', () => {5 afterEach(() => {6 jest.restoreAllMocks();7 });8 describe('open source results', () => {9 const resultsFixture = JSON.parse(10 fs.readFileSync('test/fixtures/basic-npm/results.json', 'utf-8'),11 );12 const mappedResultsFixture = JSON.parse(13 fs.readFileSync('test/fixtures/basic-npm/mappedResults.json', 'utf-8'),14 );15 it('should not create any JSON unless it is needed per options', () => {16 const options = {} as Options;17 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');18 const res = extractDataToSendFromResults(19 resultsFixture,20 mappedResultsFixture,21 options,22 );23 expect(jsonStringifySpy).toHaveBeenCalledTimes(0);24 expect(res.stringifiedData).toBe('');25 expect(res.stringifiedJsonData).toBe('');26 expect(res.stringifiedSarifData).toBe('');27 });28 it('should create Snyk JSON and only Snyk JSON if `--json` is set in the options', () => {29 const options = {30 json: true,31 } as Options;32 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');33 const res = extractDataToSendFromResults(34 resultsFixture,35 mappedResultsFixture,36 options,37 );38 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);39 expect(res.stringifiedData).not.toBe('');40 expect(res.stringifiedJsonData).not.toBe('');41 expect(res.stringifiedSarifData).toBe('');42 });43 it('should create Snyk JSON and only Snyk JSON if `--json-file-output` is set in the options', () => {44 const options = {} as Options;45 options['json-file-output'] = 'somefile.json';46 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');47 const res = extractDataToSendFromResults(48 resultsFixture,49 mappedResultsFixture,50 options,51 );52 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);53 expect(res.stringifiedData).not.toBe('');54 expect(res.stringifiedJsonData).not.toBe('');55 expect(res.stringifiedSarifData).toBe('');56 });57 it('should create Snyk JSON and only Snyk JSON if `--json` and `--json-file-output` are set in the options', () => {58 const options = {59 json: true,60 } as Options;61 options['json-file-output'] = 'somefile.json';62 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');63 const res = extractDataToSendFromResults(64 resultsFixture,65 mappedResultsFixture,66 options,67 );68 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);69 expect(res.stringifiedData).not.toBe('');70 expect(res.stringifiedJsonData).not.toBe('');71 expect(res.stringifiedSarifData).toBe('');72 });73 it('should create SARIF JSON and only SARIF JSON if `--sarif` is set in the options', () => {74 const options = {75 sarif: true,76 } as Options;77 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');78 const res = extractDataToSendFromResults(79 resultsFixture,80 mappedResultsFixture,81 options,82 );83 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);84 expect(res.stringifiedData).not.toBe('');85 expect(res.stringifiedJsonData).toBe('');86 expect(res.stringifiedSarifData).not.toBe('');87 });88 it('should create SARIF JSON and only SARIF JSON if `--sarif-file-output` is set in the options', () => {89 const options = {} as Options;90 options['sarif-file-output'] = 'somefile.json';91 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');92 const res = extractDataToSendFromResults(93 resultsFixture,94 mappedResultsFixture,95 options,96 );97 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);98 expect(res.stringifiedData).toBe('');99 expect(res.stringifiedJsonData).toBe('');100 expect(res.stringifiedSarifData).not.toBe('');101 });102 it('should create SARIF JSON and only SARIF JSON if `--sarif` and `--sarif-file-output` are set in the options', () => {103 const options = {104 sarif: true,105 } as Options;106 options['sarif-file-output'] = 'somefile.json';107 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');108 const res = extractDataToSendFromResults(109 resultsFixture,110 mappedResultsFixture,111 options,112 );113 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);114 expect(res.stringifiedData).not.toBe('');115 expect(res.stringifiedJsonData).toBe('');116 expect(res.stringifiedSarifData).not.toBe('');117 });118 });119 describe('open source results grouping', () => {120 describe('single project results grouping', () => {121 const resultsFixture = JSON.parse(122 fs.readFileSync(123 'test/fixtures/npm/issue-grouping/singleProjectResults.json',124 'utf-8',125 ),126 );127 const mappedResultsFixture = JSON.parse(128 fs.readFileSync(129 'test/fixtures/npm/issue-grouping/singleProjectMappedResults.json',130 'utf-8',131 ),132 );133 const resultJsonDataGroupedFixture = JSON.parse(134 fs.readFileSync(135 'test/fixtures/npm/issue-grouping/singleProjectResultJsonDataGrouped.json',136 'utf-8',137 ),138 );139 const resultJsonDataNonGroupedFixture = JSON.parse(140 fs.readFileSync(141 'test/fixtures/npm/issue-grouping/singleProjectResultJsonDataNonGrouped.json',142 'utf-8',143 ),144 );145 it('should create grouped Snyk JSON and only grouped Snyk JSON if `--json` and `--group-issues` is set in the options', () => {146 const options = {147 json: true,148 'group-issues': true,149 } as Options;150 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');151 const res = extractDataToSendFromResults(152 resultsFixture,153 mappedResultsFixture,154 options,155 );156 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);157 expect(JSON.parse(res.stringifiedJsonData)).toMatchObject(158 resultJsonDataGroupedFixture,159 );160 expect(res.stringifiedData).not.toBe('');161 expect(res.stringifiedJsonData).not.toBe('');162 expect(res.stringifiedSarifData).toBe('');163 expect(164 JSON.parse(res.stringifiedJsonData).vulnerabilities,165 ).toHaveLength(7);166 });167 it('should create non-grouped Snyk JSON and only Snyk JSON if `--json` is set in the options', () => {168 const options = {169 json: true,170 } as Options;171 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');172 const res = extractDataToSendFromResults(173 resultsFixture,174 mappedResultsFixture,175 options,176 );177 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);178 expect(JSON.parse(res.stringifiedJsonData)).toMatchObject(179 resultJsonDataNonGroupedFixture,180 );181 expect(res.stringifiedData).not.toBe('');182 expect(res.stringifiedJsonData).not.toBe('');183 expect(res.stringifiedSarifData).toBe('');184 expect(185 JSON.parse(res.stringifiedJsonData).vulnerabilities,186 ).toHaveLength(11);187 });188 });189 describe('multiple project results grouping', () => {190 const resultsFixture = JSON.parse(191 fs.readFileSync(192 'test/fixtures/npm/issue-grouping/multiProjectResults.json',193 'utf-8',194 ),195 );196 const mappedResultsFixture = JSON.parse(197 fs.readFileSync(198 'test/fixtures/npm/issue-grouping/multiProjectMappedResults.json',199 'utf-8',200 ),201 );202 const resultJsonDataGroupedFixture = JSON.parse(203 fs.readFileSync(204 'test/fixtures/npm/issue-grouping/multiProjectResultJsonDataGrouped.json',205 'utf-8',206 ),207 );208 const resultJsonDataNonGroupedFixture = JSON.parse(209 fs.readFileSync(210 'test/fixtures/npm/issue-grouping/multiProjectResultJsonDataNonGrouped.json',211 'utf-8',212 ),213 );214 it('should create grouped Snyk JSON for each of the projects in the result if `--json` and `--group-issues` is set in the options', () => {215 const options = {216 json: true,217 'group-issues': true,218 } as Options;219 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');220 const res = extractDataToSendFromResults(221 resultsFixture,222 mappedResultsFixture,223 options,224 );225 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);226 expect(JSON.parse(res.stringifiedJsonData)).toMatchObject(227 resultJsonDataGroupedFixture,228 );229 expect(res.stringifiedData).not.toBe('');230 expect(res.stringifiedJsonData).not.toBe('');231 expect(res.stringifiedSarifData).toBe('');232 expect(233 JSON.parse(res.stringifiedJsonData)[0].vulnerabilities,234 ).toHaveLength(7);235 expect(236 JSON.parse(res.stringifiedJsonData)[1].vulnerabilities,237 ).toHaveLength(2);238 });239 it('should create non-grouped Snyk JSON for each of the projects in the result if `--json` is set in the options', () => {240 const options = {241 json: true,242 } as Options;243 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');244 const res = extractDataToSendFromResults(245 resultsFixture,246 mappedResultsFixture,247 options,248 );249 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);250 expect(JSON.parse(res.stringifiedJsonData)).toMatchObject(251 resultJsonDataNonGroupedFixture,252 );253 expect(res.stringifiedData).not.toBe('');254 expect(res.stringifiedJsonData).not.toBe('');255 expect(res.stringifiedSarifData).toBe('');256 expect(257 JSON.parse(res.stringifiedJsonData)[0].vulnerabilities,258 ).toHaveLength(11);259 expect(260 JSON.parse(res.stringifiedJsonData)[1].vulnerabilities,261 ).toHaveLength(4);262 });263 });264 });265 describe('container image json results', () => {266 const resultsContainerFixture = JSON.parse(267 fs.readFileSync('test/fixtures/basic-apk/results.json', 'utf-8'),268 );269 const mappedResultsContainerFixture = JSON.parse(270 fs.readFileSync('test/fixtures/basic-apk/mappedResults.json', 'utf-8'),271 );272 const resultJsonDataGroupedContainerFixture = JSON.parse(273 fs.readFileSync(274 'test/fixtures/basic-apk/resultJsonDataGrouped.json',275 'utf-8',276 ),277 );278 it('should create Snyk grouped JSON for container image if `--json` and `--group-issues` are set in the options', () => {279 const options = {280 json: true,281 docker: true,282 'group-issues': true,283 } as Options;284 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');285 const res = extractDataToSendFromResults(286 resultsContainerFixture,287 mappedResultsContainerFixture,288 options,289 );290 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);291 expect(JSON.parse(res.stringifiedJsonData)).toMatchObject(292 resultJsonDataGroupedContainerFixture,293 );294 expect(res.stringifiedData).not.toBe('');295 expect(res.stringifiedJsonData).not.toBe('');296 expect(res.stringifiedSarifData).toBe('');297 });298 });299 describe('container app and os json results', () => {300 const resultsContainerAppVulnsFixture = JSON.parse(301 fs.readFileSync(302 'test/fixtures/container-app-vulns/results.json',303 'utf-8',304 ),305 );306 const mappedResultsAppVulnsFixture = JSON.parse(307 fs.readFileSync(308 'test/fixtures/container-app-vulns/mappedResults.json',309 'utf-8',310 ),311 );312 const resultJsonDataGroupedContainerAppVulnsFixture = JSON.parse(313 fs.readFileSync(314 'test/fixtures/container-app-vulns/resultJsonDataGrouped.json',315 'utf-8',316 ),317 );318 const resultJsonDataNonGroupedContainerAppVulnsFixture = JSON.parse(319 fs.readFileSync(320 'test/fixtures/container-app-vulns/resultJsonDataNonGrouped.json',321 'utf-8',322 ),323 );324 it('should create Snyk grouped JSON for each of the multiple test results if `--json` and `--group-issues` are set in the options', () => {325 const options = {326 json: true,327 docker: true,328 'group-issues': true,329 } as Options;330 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');331 const res = extractDataToSendFromResults(332 resultsContainerAppVulnsFixture,333 mappedResultsAppVulnsFixture,334 options,335 );336 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);337 const parsedStringifiedJson = JSON.parse(res.stringifiedJsonData);338 expect(parsedStringifiedJson).toMatchObject(339 resultJsonDataGroupedContainerAppVulnsFixture,340 );341 expect(res.stringifiedData).not.toBe('');342 expect(res.stringifiedJsonData).not.toBe('');343 expect(res.stringifiedSarifData).toBe('');344 expect(parsedStringifiedJson.vulnerabilities).toHaveLength(1);345 expect(parsedStringifiedJson.applications).not.toBeUndefined();346 expect(347 parsedStringifiedJson.applications[0].vulnerabilities,348 ).toHaveLength(7);349 });350 it('should create a non-grouped JSON for each of the test results if `--json` option is set and `--group-issues` is not set', () => {351 const options = {352 json: true,353 docker: true,354 } as Options;355 const jsonStringifySpy = jest.spyOn(JSON, 'stringify');356 const res = extractDataToSendFromResults(357 resultsContainerAppVulnsFixture,358 mappedResultsAppVulnsFixture,359 options,360 );361 expect(jsonStringifySpy).toHaveBeenCalledTimes(1);362 const parsedStringifiedJson = JSON.parse(res.stringifiedJsonData);363 expect(parsedStringifiedJson).toMatchObject(364 resultJsonDataNonGroupedContainerAppVulnsFixture,365 );366 expect(res.stringifiedData).not.toBe('');367 expect(res.stringifiedJsonData).not.toBe('');368 expect(res.stringifiedSarifData).toBe('');369 expect(parsedStringifiedJson.vulnerabilities).toHaveLength(3);370 expect(parsedStringifiedJson.applications).not.toBeUndefined();371 expect(372 parsedStringifiedJson.applications[0].vulnerabilities,373 ).toHaveLength(11);374 });375 });...

Full Screen

Full Screen

start.test.ts

Source:start.test.ts Github

copy

Full Screen

1import {2 farms,3 bills,4 pools,5 jungleFarms,6 tokens,7 vaults,8 dualFarms,9 nfaStakingPools,10 iaos,11 zapInputTokens,12} from '../src/constants'13import billsJson from '../config/bills.json'14import farmsJson from '../config/farms.json'15import jungleFarmsJson from '../config/jungleFarms.json'16import poolsJson from '../config/pools.json'17import tokensJson from '../config/tokens.json'18import vaultsJson from '../config/vaults.json'19import dualFarmsJson from '../config/dualFarms.json'20import nfaStakingPoolJson from '../config/nfaStakingPools.json'21import iaosJson from '../config/iaos.json'22import zapInputTokensJson from '../config/zapInputTokens.json'23const stringifiedBills = JSON.stringify(bills, null, 2)24const stringifiedBillsJson = JSON.stringify(billsJson, null, 2)25const stringifiedFarms = JSON.stringify(farms, null, 2)26const stringifiedFarmsJson = JSON.stringify(farmsJson, null, 2)27const stringifiedJungleFarms = JSON.stringify(pools, null, 2)28const stringifiedJungleFarmsJson = JSON.stringify(poolsJson, null, 2)29const stringifiedPools = JSON.stringify(jungleFarms, null, 2)30const stringifiedPoolsJson = JSON.stringify(jungleFarmsJson, null, 2)31const stringifiedTokens = JSON.stringify(tokens, null, 2)32const stringifiedTokensJson = JSON.stringify(tokensJson, null, 2)33const stringifiedVaults = JSON.stringify(vaults, null, 2)34const stringifiedVaultsJson = JSON.stringify(vaultsJson, null, 2)35const stringifiedDualFarms = JSON.stringify(dualFarms, null, 2)36const stringifiedDualFarmsJson = JSON.stringify(dualFarmsJson, null, 2)37const stringifyNfaStakingPools = JSON.stringify(nfaStakingPools, null, 2)38const stringifiedNfaStakingPoolsJson = JSON.stringify(nfaStakingPoolJson, null, 2)39const stringifyIaos = JSON.stringify(iaos, null, 2)40const stringifiedIaosJson = JSON.stringify(iaosJson, null, 2)41const stringifyZapInputTokens = JSON.stringify(zapInputTokens, null, 2)42const stringifiedZapInputTokensJson = JSON.stringify(zapInputTokensJson, null, 2)43describe('JSON files are most recent and are correct', () => {44 it('Test if bills have been generated', () => {45 expect(stringifiedBillsJson).toBe(stringifiedBills)46 })47 it('Test if farms have been generated', () => {48 expect(stringifiedFarmsJson).toBe(stringifiedFarms)49 })50 it('Test if jungle farms have been generated', () => {51 expect(stringifiedJungleFarmsJson).toBe(stringifiedJungleFarms)52 })53 it('Test if pools have been generated', () => {54 expect(stringifiedPoolsJson).toBe(stringifiedPools)55 })56 it('Test if tokens have been generated', () => {57 expect(stringifiedTokensJson).toBe(stringifiedTokens)58 })59 it('Test if vaults have been generated', () => {60 expect(stringifiedVaultsJson).toBe(stringifiedVaults)61 })62 it('Test if dual farms have been generated', () => {63 expect(stringifiedDualFarmsJson).toBe(stringifiedDualFarms)64 })65 it('Test if nfa staking pools have been generated', () => {66 expect(stringifiedNfaStakingPoolsJson).toBe(stringifyNfaStakingPools)67 })68 it('Test if iaos have been generated', () => {69 expect(stringifiedIaosJson).toBe(stringifyIaos)70 })71 it('Test if zap Input Tokens have been generated', () => {72 expect(stringifiedZapInputTokensJson).toBe(stringifyZapInputTokens)73 })...

Full Screen

Full Screen

main.js

Source:main.js Github

copy

Full Screen

1document.addEventListener('DOMContentLoaded', function () {2 3 'use strict';4 5 //6 //Third party components7 //8 //9 //Custom components10 //11 12 numberPositionConversion(inputnumber) {13 if (parseFloat(inputnumber) < 0) {14 var stringifiedNumber = String(inputnumber).slice(1);15 } else {16 var stringifiedNumber = String(inputnumber);17 }18 if (stringifiedNumber.length > 3) {19 var numberPositionQuantity = Math.floor(stringifiedNumber.length / 3);20 var slicer = -3;21 for (var i=1; i<numberPositionQuantity+1; i++) {22 var stringifiedSubstringEnd = stringifiedNumber.slice(slicer);23 var stringifiedSubstringStart = stringifiedNumber.slice(0, slicer);24 if (stringifiedSubstringStart.length == 0) {25 } else {26 stringifiedSubstringStart = stringifiedSubstringStart + ',';27 stringifiedNumber = stringifiedSubstringStart + stringifiedSubstringEnd;28 slicer = slicer - 4;29 }30 }31 if (parseFloat(inputnumber) < 0) {32 stringifiedNumber = '-' + stringifiedNumber;33 }34 return stringifiedNumber35 } else {36 if (parseFloat(inputnumber) < 0) {37 stringifiedNumber = '-' + stringifiedNumber;38 }39 return stringifiedNumber;40 }41 };42 43 44 console.log(numberPositionConversion(31714.88));45 46 //47 //Custom components typescript48 //49 50 //= custom/custom.js51 //= ts/tscript.js...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1import { storiesOf } from 'storybook-root';2const stories = storiesOf('Button', module);3stories.add('with text', () => <Button>Hello Button</Button>);4stories.add('with some emoji', () => (5));6import 'storybook-root/register';7{8 "compilerOptions": {9 "paths": {10 }11 }12}

Full Screen

Using AI Code Generation

copy

Full Screen

1const logger = require('storybook-root-logger');2logger.debug('debug message');3logger.info('info message');4logger.warn('warn message');5logger.error('error message');6const logger = require('storybook-root-logger').default;7logger.debug('debug message');8logger.info('info message');9logger.warn('warn message');10logger.error('error message');11const logger = require('storybook-root-logger').default;12logger.debug('debug message');13logger.info('info message');14logger.warn('warn message');15logger.error('error message');16const logger = require('storybook-root-logger').default;17logger.debug('debug message');18logger.info('info message');19logger.warn('warn message');20logger.error('error message');21const logger = require('storybook-root-logger').default;22logger.debug('debug message');23logger.info('info message');24logger.warn('warn message');25logger.error('error message');26const logger = require('storybook-root-logger').default;27logger.debug('debug message');28logger.info('info message');29logger.warn('warn message');30logger.error('error message');31const logger = require('storybook-root-logger').default;32logger.debug('debug message');33logger.info('info message');34logger.warn('warn message');35logger.error('error message');36const logger = require('storybook-root-logger').default;37logger.debug('debug message');38logger.info('info message');39logger.warn('warn message');40logger.error('error message');41const logger = require('storybook-root-logger').default;

Full Screen

Using AI Code Generation

copy

Full Screen

1import { storybookRootLogger } from 'storybook-root-logger';2storybookRootLogger();3module.exports = {4 stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],5 webpackFinal: (config) => {6 config.module.rules.push({7 test: /\.(ts|tsx)$/,8 loader: require.resolve("babel-loader"),9 options: {10 presets: [["react-app", { flow: false, typescript: true }]],11 require.resolve("babel-plugin-react-docgen"),12 require.resolve("babel-plugin-react-require"),13 require.resolve("babel-plugin-transform-remove-console"),14 },15 });16 config.resolve.extensions.push(".ts", ".tsx");17 return config;18 },19};20export const parameters = {21 actions: { argTypesRegex: "^on[A-Z].*" },22};23 (Story) => {24 return (25 );26 },27];28import { GlobalStyles } from "../src/styles/GlobalStyles";29 (Story) => {30 return (31 );32 },33];

Full Screen

Using AI Code Generation

copy

Full Screen

1import { configure } from '@storybook/react';2import { setAddon } from '@storybook/react';3import chaptersAddon from 'react-storybook-addon-chapters';4setAddon(chaptersAddon);5function loadStories() {6 require('../src/stories');7}8configure(loadStories, module);9import React from 'react';10import { storiesOf, action } from '@storybook/react';11import { withKnobs, text, boolean, number } from '@storybook/addon-knobs';12import { withInfo } from '@storybook/addon-info';13import { withChapters } from 'react-storybook-addon-chapters';14import { MemoryRouter } from 'react-router-dom';15import { withRouter } from 'react-router-dom';16const Component = () => <div>Test</div>;17const ComponentWithRouter = withRouter(Component);18storiesOf('Test', module)19 .addDecorator(withKnobs)20 .addDecorator(withInfo)21 .addDecorator(story => <MemoryRouter>{story()}</MemoryRouter>)22 .add('default', withChapters({23 {24 {

Full Screen

Using AI Code Generation

copy

Full Screen

1var storybook = require('storybook-root');2var story = storybook.story('my story');3var story2 = storybook.story('my story', 'with a context');4var story3 = storybook.story('my story', 'with a context', 'and a variant');5var story4 = storybook.story('my story', 'with a context', 'and a variant', 'and a subvariant');6var storybook = require('storybook-root');7var story = storybook('my story');8var story2 = storybook('my story', 'with a context');9var story3 = storybook('my story', 'with a context', 'and a variant');10var story4 = storybook('my story', 'with a context', 'and a variant', 'and a subvariant');11var storybook = require('storybook-root');12var story = storybook.story('my story');13var story2 = storybook.story('my story', 'with a context');14var story3 = storybook.story('my story', 'with a context', 'and a variant');15var story4 = storybook.story('my story', 'with a context', 'and a variant', 'and a subvariant');16var storybook = require('storybook-root');17var story = storybook('my story');18var story2 = storybook('my story', 'with a context');19var story3 = storybook('my story', 'with a context', 'and a variant');20var story4 = storybook('my story', 'with a context', 'and a variant', 'and a subvariant');21var storybook = require('storybook-root');22var story = storybook.story('my story');23var story2 = storybook.story('my story', 'with a context');24var story3 = storybook.story('my story', 'with a context', 'and a variant');25var story4 = storybook.story('my story', 'with a context', 'and a variant', 'and a subvariant');26var storybook = require('storybook-root');27var story = storybook('my story');28var story2 = storybook('my story', 'with a context');29var story3 = storybook('my story', 'with a context', 'and a variant');

Full Screen

Using AI Code Generation

copy

Full Screen

1const path = require('path')2const rootPath = path.resolve(__dirname, '../')3const rootRequire = require('storybook-root-require')4rootRequire.addPath(rootPath)5rootRequire('test.js')6const path = require('path')7const rootRequire = require('storybook-root-require')8const rootPath = rootRequire('test.js')9const storiesPath = path.resolve(rootPath, 'src/stories')10module.exports = {11 stories: [`${storiesPath}/**/*.stories.js`]12}

Full Screen

Using AI Code Generation

copy

Full Screen

1var storybook = require('storyboard').storybook;2var storybookRoot = new storybook.StorybookRoot();3storybookRoot.addStory('story title', 'story text');4console.log(storybookRoot.toString());5var storybook = require('storyboard').storybook;6var storybookRoot = new storybook.StorybookRoot();7storybookRoot.addStory('story title', 'story text');8var stringifiedStorybookRoot = storybookRoot.toString();9var storybookRoot2 = new storybook.StorybookRoot(stringifiedStorybookRoot);10console.log(storybookRoot2.toString());11var storybook = require('storyboard').storybook;12var storybookRoot = new storybook.StorybookRoot();13storybookRoot.addStory('story title', 'story text');14var stringifiedStorybookRoot = storybookRoot.toString();15var storybookRoot2 = new storybook.StorybookRoot(stringifiedStorybookRoot);16console.log(storybookRoot2.toString());17var storybook = require('storyboard').storybook;18var storybookRoot = new storybook.StorybookRoot();19storybookRoot.addStory('story title', 'story text');20var stringifiedStorybookRoot = storybookRoot.toString();21var storybookRoot2 = new storybook.StorybookRoot(stringifiedStorybookRoot);22console.log(storybookRoot2.toString());23var storybook = require('storyboard').storybook;24var storybookRoot = new storybook.StorybookRoot();25storybookRoot.addStory('story title', 'story text');26var stringifiedStorybookRoot = storybookRoot.toString();27var storybookRoot2 = new storybook.StorybookRoot(stringifiedStorybookRoot);28console.log(storybookRoot2.toString());

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run storybook-root automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful