Best JavaScript code snippet using storybook-root
isType.ts
Source:isType.ts
1import { Game, Keyword, Location } from "skyrimPlatform"2/** Checks if a location is of type "animal den". */3export const isAnimalDen = (l: Location) =>4 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130de, "Skyrim.esm")))5/** Checks if a location is of type "bandit camp". */6export const isBanditCamp = (l: Location) =>7 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130df, "Skyrim.esm")))8/** Checks if a location is of type "barracks". */9export const isBarracks = (l: Location) =>10 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd55, "Skyrim.esm")))11/** Checks if a location is of type "castle". */12export const isCastle = (l: Location) =>13 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd57, "Skyrim.esm")))14/** Checks if a location is of type "cemetery". */15export const isCemetery = (l: Location) =>16 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd58, "Skyrim.esm")))17/** Checks if a location is of type "city". */18export const isCity = (l: Location) =>19 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x13168, "Skyrim.esm")))20/** Checks if a location is of type "clearable". */21export const isClearable = (l: Location) =>22 l.hasKeyword(Keyword.from(Game.getFormFromFile(0xf5e80, "Skyrim.esm")))23/** Checks if a location is of type "dragon lair". */24export const isDragonLair = (l: Location) =>25 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e0, "Skyrim.esm")))26/** Checks if a location is of type "dragon priest lair". */27export const isDragonPriestLair = (l: Location) =>28 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e1, "Skyrim.esm")))29/** Checks if a location is of type "draugr crypt". */30export const isDraugrCrypt = (l: Location) =>31 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e2, "Skyrim.esm")))32/** Checks if a location is of type "dungeon". */33export const isDungeon = (l: Location) =>34 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130db, "Skyrim.esm")))35/** Checks if a location is of type "dwarven automatons". */36export const isDwarvenAutomatons = (l: Location) =>37 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e3, "Skyrim.esm")))38/** Checks if a location is of type "dwelling". */39export const isDwelling = (l: Location) =>40 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130dc, "Skyrim.esm")))41/** Checks if a location is of type "falmer hive". */42export const isFalmerHive = (l: Location) =>43 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e4, "Skyrim.esm")))44/** Checks if a location is of type "farm". */45export const isFarm = (l: Location) =>46 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x18ef0, "Skyrim.esm")))47/** Checks if a location is of type "forsworn camp". */48export const isForswornCamp = (l: Location) =>49 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130ee, "Skyrim.esm")))50/** Checks if a location is of type "giant camp". */51export const isGiantCamp = (l: Location) =>52 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e5, "Skyrim.esm")))53/** Checks if a location is of type "guild". */54export const isGuild = (l: Location) =>55 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd5a, "Skyrim.esm")))56/** Checks if a location is of type "habitation". */57export const isHabitation = (l: Location) =>58 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x39793, "Skyrim.esm")))59/** Checks if a location is of type "habitation has inn". */60export const isHabitationHasInn = (l: Location) =>61 l.hasKeyword(Keyword.from(Game.getFormFromFile(0xa6e84, "Skyrim.esm")))62/** Checks if a location is of type "hagraven nest". */63export const isHagravenNest = (l: Location) =>64 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e6, "Skyrim.esm")))65/** Checks if a location is of type "hold". */66export const isHold = (l: Location) =>67 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x16771, "Skyrim.esm")))68/** Checks if a location is of type "hold capital". */69export const isHoldCapital = (l: Location) =>70 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x868e2, "Skyrim.esm")))71/** Checks if a location is of type "hold major". */72export const isHoldMajor = (l: Location) =>73 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x868e1, "Skyrim.esm")))74/** Checks if a location is of type "hold minor". */75export const isHoldMinor = (l: Location) =>76 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x868e3, "Skyrim.esm")))77/** Checks if a location is of type "house". */78export const isHouse = (l: Location) =>79 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cb85, "Skyrim.esm")))80/** Checks if a location is of type "inn". */81export const isInn = (l: Location) =>82 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cb87, "Skyrim.esm")))83/** Checks if a location is of type "jail". */84export const isJail = (l: Location) =>85 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd59, "Skyrim.esm")))86/** Checks if a location is of type "lumber mill". */87export const isLumberMill = (l: Location) =>88 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x18ef2, "Skyrim.esm")))89/** Checks if a location is of type "military camp". */90export const isMilitaryCamp = (l: Location) =>91 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e8, "Skyrim.esm")))92/** Checks if a location is of type "military fort". */93export const isMilitaryFort = (l: Location) =>94 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e7, "Skyrim.esm")))95/** Checks if a location is of type "mine". */96export const isMine = (l: Location) =>97 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x18ef1, "Skyrim.esm")))98/** Checks if a location is of type "orc stronghold". */99export const isOrcStronghold = (l: Location) =>100 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130e9, "Skyrim.esm")))101/** Checks if a location is of type "player house". */102export const isPlayerHouse = (l: Location) =>103 l.hasKeyword(Keyword.from(Game.getFormFromFile(0xfc1a3, "Skyrim.esm")))104/** Checks if a location is of type "settlement". */105export const isSettlement = (l: Location) =>106 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x13167, "Skyrim.esm")))107/** Checks if a location is of type "ship". */108export const isShip = (l: Location) =>109 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd5b, "Skyrim.esm")))110/** Checks if a location is of type "shipwreck". */111export const isShipwreck = (l: Location) =>112 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1929f, "Skyrim.esm")))113/** Checks if a location is of type "spriggan grove". */114export const isSprigganGrove = (l: Location) =>115 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130ea, "Skyrim.esm")))116/** Checks if a location is of type "stewards dwelling". */117export const isStewardsDwelling = (l: Location) =>118 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x504f9, "Skyrim.esm")))119/** Checks if a location is of type "store". */120export const isStore = (l: Location) =>121 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cb86, "Skyrim.esm")))122/** Checks if a location is of type "temple". */123export const isTemple = (l: Location) =>124 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1cd56, "Skyrim.esm")))125/** Checks if a location is of type "town". */126export const isTown = (l: Location) =>127 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x13166, "Skyrim.esm")))128/** Checks if a location is of type "vampire lair". */129export const isVampireLair = (l: Location) =>130 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130eb, "Skyrim.esm")))131/** Checks if a location is of type "warlock lair". */132export const isWarlockLair = (l: Location) =>133 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130ec, "Skyrim.esm")))134/** Checks if a location is of type "werewolf lair". */135export const isWerewolfLair = (l: Location) =>136 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130ed, "Skyrim.esm")))137/** Checks if a location is of type "set cave". */138export const isSetCave = (l: Location) =>139 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130ef, "Skyrim.esm")))140/** Checks if a location is of type "set cave ice". */141export const isSetCaveIce = (l: Location) =>142 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x100819, "Skyrim.esm")))143/** Checks if a location is of type "set dwarven ruin". */144export const isSetDwarvenRuin = (l: Location) =>145 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130f0, "Skyrim.esm")))146/** Checks if a location is of type "set military camp". */147export const isSetMilitaryCamp = (l: Location) =>148 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x1926a, "Skyrim.esm")))149/** Checks if a location is of type "set military fort". */150export const isSetMilitaryFort = (l: Location) =>151 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130f1, "Skyrim.esm")))152/** Checks if a location is of type "set nordic ruin". */153export const isSetNordicRuin = (l: Location) =>154 l.hasKeyword(Keyword.from(Game.getFormFromFile(0x130f2, "Skyrim.esm")))155/** Checks if a location is of type "set outdoor". */156export const isSetOutdoor = (l: Location) =>...
arrFilterByKeywords.mjs
Source:arrFilterByKeywords.mjs
1import map from 'lodash/map'2import size from 'lodash/size'3import trim from 'lodash/trim'4import isearr from './isearr.mjs'5import isestr from './isestr.mjs'6import sep from './sep.mjs'7import strleft from './strleft.mjs'8import strdelleft from './strdelleft.mjs'9/**10 * å°arré£åå
§åå串é²è¡ééµåè¨ç®ï¼è¨ç®æ¯å¦å«æééµåèç¨åº¦ï¼å¤ééµåç¨ç©ºç½åéï¼å¿
è¦ééµåå¯æ¼åé¦æ·»å ã+ãï¼ä¸è¦ééµåå¯æ¼åé¦æ·»å ã-ã11 *12 * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/arrFilterByKeywords.test.mjs Github}13 * @memberOf wsemi14 * @param {Array} arr 輸å
¥è¦è¢«å°æ¾çå串é£å15 * @param {String|Array} keywords 輸å
¥è¦å°æ¾çééµåå串æé£å16 * @returns {Array} åå³çµæç©ä»¶é£å17 * @example18 *19 * let arr = [20 * 'abc def xyz',21 * '測試abcä¸æmnop',22 * 'Instead of creating yet another opinionated application',23 * 'Node.js module which can be integrated into a larger application',24 * ]25 * let kws = null26 * let r = null27 *28 * kws = 'abc'29 * r = arrFilterByKeywords(arr, kws)30 * console.log(r)31 * // => [32 * // { hasKeyword: true, weight: 1 },33 * // { hasKeyword: true, weight: 1 },34 * // { hasKeyword: false, weight: 0 },35 * // { hasKeyword: false, weight: 0 }36 * // ]37 *38 * kws = 'def'39 * r = arrFilterByKeywords(arr, kws)40 * console.log(r)41 * // => [42 * // { hasKeyword: true, weight: 1 },43 * // { hasKeyword: false, weight: 0 },44 * // { hasKeyword: false, weight: 0 },45 * // { hasKeyword: false, weight: 0 }46 * // ]47 *48 * kws = 'def ä¸æ'49 * r = arrFilterByKeywords(arr, kws)50 * console.log(r)51 * // => [52 * // { hasKeyword: true, weight: 1 },53 * // { hasKeyword: true, weight: 0.25 },54 * // { hasKeyword: false, weight: 0 },55 * // { hasKeyword: false, weight: 0 }56 * // ]57 *58 * kws = 'def ä¸æ mnop'59 * r = arrFilterByKeywords(arr, kws)60 * console.log(r)61 * // => [62 * // { hasKeyword: true, weight: 1 },63 * // { hasKeyword: true, weight: 0.5555555555555557 },64 * // { hasKeyword: false, weight: 0 },65 * // { hasKeyword: false, weight: 0 }66 * // ]67 *68 * kws = 'def +yet'69 * r = arrFilterByKeywords(arr, kws)70 * console.log(r)71 * // => [72 * // { hasKeyword: false, weight: 0 },73 * // { hasKeyword: false, weight: 0 },74 * // { hasKeyword: true, weight: 0.25 },75 * // { hasKeyword: false, weight: 0 }76 * // ]77 *78 * kws = 'def of module -yet'79 * r = arrFilterByKeywords(arr, kws)80 * console.log(r)81 * // => [82 * // { hasKeyword: true, weight: 1 },83 * // { hasKeyword: false, weight: 0 },84 * // { hasKeyword: false, weight: 0 },85 * // { hasKeyword: true, weight: 0.25 }86 * // ]87 *88 * kws = '+'89 * r = arrFilterByKeywords(arr, kws)90 * console.log(r)91 * // => [92 * // { hasKeyword: false, weight: 0 },93 * // { hasKeyword: false, weight: 0 },94 * // { hasKeyword: false, weight: 0 },95 * // { hasKeyword: false, weight: 0 }96 * // ]97 *98 * kws = '-'99 * r = arrFilterByKeywords(arr, kws)100 * console.log(r)101 * // => [102 * // { hasKeyword: false, weight: 0 },103 * // { hasKeyword: false, weight: 0 },104 * // { hasKeyword: false, weight: 0 },105 * // { hasKeyword: false, weight: 0 }106 * // ]107 *108 * kws = 'def +'109 * r = arrFilterByKeywords(arr, kws)110 * console.log(r)111 * // => [112 * // { hasKeyword: true, weight: 1 },113 * // { hasKeyword: false, weight: 0 },114 * // { hasKeyword: false, weight: 0 },115 * // { hasKeyword: false, weight: 0 }116 * // ]117 *118 * kws = ['def', 'of', 'module', '-yet']119 * r = arrFilterByKeywords(arr, kws)120 * console.log(r)121 * // => [122 * // { hasKeyword: true, weight: 1 },123 * // { hasKeyword: false, weight: 0 },124 * // { hasKeyword: false, weight: 0 },125 * // { hasKeyword: true, weight: 0.25 }126 * // ]127 *128 * kws = ['can be', 'def']129 * r = arrFilterByKeywords(arr, kws)130 * console.log(r)131 * // => [132 * // { hasKeyword: true, weight: 0.25 },133 * // { hasKeyword: false, weight: 0 },134 * // { hasKeyword: false, weight: 0 },135 * // { hasKeyword: true, weight: 1 }136 * // ]137 *138 */139function arrFilterByKeywords(arr, keywords) {140 //check141 if (!isearr(arr)) {142 return []143 }144 //check145 if (!isestr(keywords) && !isearr(keywords)) {146 return []147 }148 //kws149 let kws = null150 if (isestr(keywords)) {151 kws = sep(keywords, ' ') //è¥çºå串åç¨ç©ºç½åååºåééµå152 }153 else {154 kws = keywords //å¯æ¯æ´ééµåå
§å«ç©ºç½155 }156 //n157 let n = size(kws)158 function core(c) {159 //for160 let b = false161 let weight = 0162 for (let k = 0; k < n; k++) {163 let kw = kws[k]164 //ekw165 let ekw = kw166 let bInclude = strleft(kw, 1) === '+'167 let bExclude = strleft(kw, 1) === '-'168 if (bInclude || bExclude) {169 ekw = strdelleft(kw, 1)170 }171 //check172 if (trim(ekw) === '') {173 continue174 }175 //bHas176 let bHas = c.indexOf(ekw) >= 0177 // console.log('c', c, ':ekw', ekw, ':bHas', bHas)178 //å¿
æééµå179 if (bInclude) {180 if (!bHas) {181 b = false //è¥ç¡å¿
æééµå, å¼·å¶è¦çºæ¾ä¸å°182 weight = 0183 break184 }185 }186 //ä¸è½æééµå187 if (bExclude) {188 if (bHas) {189 b = false //æ¾å°ä¸è½æééµå, å¼·å¶è¦çºæ¾ä¸å°190 weight = 0191 break192 }193 }194 //å«æé建ååä¾ç
§é åºçµ¦äºæ¬é195 if (bHas) {196 b = true197 let w = 1 - k / n198 w = w ** 2 //éç·æ§éæ¸, æ第1ééµåæ¬é1, åªæ2+3ééµåæ¬éä¹ä¸è¶
é第1ééµåæ¬é199 weight += w200 }201 }202 return {203 hasKeyword: b,204 weight,205 }206 }207 //rs208 let rs = map(arr, (c) => {209 return core(c)210 })211 return rs212}...
drawcard.hasKeyword.spec.js
Source:drawcard.hasKeyword.spec.js
1const DrawCard = require('../../../server/game/drawcard.js');2describe('the DrawCard', function() {3 describe('the hasKeyword() function', function() {4 beforeEach(function() {5 this.owner = { noTimer: true };6 this.card = new DrawCard(this.owner, {});7 });8 it('should return false if no keyword has been added', function() {9 expect(this.card.hasKeyword('covert')).toBe(false);10 });11 it('should return true if a keyword has been added', function() {12 this.card.addKeyword('covert');13 expect(this.card.hasKeyword('covert')).toBe(true);14 });15 it('should not be case sensitive', function() {16 this.card.addKeyword('Intimidate');17 expect(this.card.hasKeyword('InTiMiDaTe')).toBe(true);18 });19 it('should return true if a keyword has been added more than it has been removed', function() {20 this.card.addKeyword('covert');21 this.card.addKeyword('covert');22 this.card.removeKeyword('covert');23 expect(this.card.hasKeyword('covert')).toBe(true);24 });25 it('should return false if a keyword has been removed more than it has been added', function() {26 this.card.removeKeyword('covert');27 this.card.removeKeyword('covert');28 this.card.addKeyword('covert');29 expect(this.card.hasKeyword('covert')).toBe(false);30 });31 });32 describe('integration', function() {33 const _ = require('underscore');34 const Game = require('../../../server/game/game.js');35 const Player = require('../../../server/game/player.js');36 beforeEach(function() {37 this.gameService = jasmine.createSpyObj('gameService', ['save']);38 this.game = new Game({}, { gameService: this.gameService });39 this.spy = spyOn(this.game, 'reportError');40 this.player = new Player(1, { username: 'foo', settings: { optionSettings: {} } }, false, this.game);41 this.player.noTimer = true;42 this.player2 = new Player(2, { username: 'bar', settings: { optionSettings: {} } }, false, this.game);43 this.game.playersAndSpectators['foo'] = this.player;44 this.game.playersAndSpectators['bar'] = this.player2;45 this.game.initialise();46 this.game.setFirstPlayer(this.player);47 this.game.currentPhase = 'dynasty';48 this.player.phase = 'dynasty';49 });50 describe('parsing initial keywords', function() {51 describe('when the card mentions a keyword in its body', function() {52 beforeEach(function() {53 this.card = new DrawCard(this.player, { text: 'Each <i>Covert</i> character you control cannot be bypassed by covert.' });54 this.card.location = 'hand';55 this.player.hand = _([this.card]);56 this.player.initiateCardAction(this.card);57 // Resolve events in pipeline.58 this.game.continue();59 });60 it('should return false.', function() {61 expect(this.card.hasKeyword('covert')).toBe(false);62 });63 });64 describe('when the card has a keyword line', function() {65 beforeEach(function() {66 this.card = new DrawCard(this.player, { type: 'character', cost: 0, side: 'dynasty', text_canonical: 'covert.\nsomestuff. restricted.\nnotarealkeyword.\nextra text because we need stuff here.' });67 this.card.location = 'province 1';68 this.player.provinceOne = _([this.card]);69 this.player.dynastyDeck = _([new DrawCard(this.player, {})]);70 this.player.moveCard(this.card, 'play area');71 // Resolve events in pipeline.72 this.game.continue();73 });74 it('should return true for each keyword', function() {75 expect(this.card.hasKeyword('covert')).toBe(true);76 expect(this.card.hasKeyword('Restricted')).toBe(true);77 });78 it('should reject non-valid keywords', function() {79 expect(this.card.hasKeyword('Notarealkeyword')).toBe(false);80 });81 it('should not blank externally given keywords', function() {82 this.card.addKeyword('Sincerity');83 this.card.setBlank();84 // Resolve events in pipeline.85 this.game.continue();86 expect(this.card.hasKeyword('covert')).toBe(false);87 expect(this.card.hasKeyword('Restricted')).toBe(false);88 expect(this.card.hasKeyword('Sincerity')).toBe(true);89 });90 });91 });92 });...
Using AI Code Generation
1var storybook = require('./storybook-root.js');2var storybookRoot = storybook.storybookRoot;3var storybookRoot = new storybookRoot();4storybookRoot.hasKeyword('keyword');5var storybook = require('./storybook.js');6var storybook = storybook.storybook;7var storybook = new storybook();8storybook.hasKeyword('keyword');
Using AI Code Generation
1var storybook = require('storybook-root');2var story = storybook.createStory();3var hasKeyword = story.hasKeyword('keyword');4console.log(hasKeyword);5var story = require('story');6module.exports = {7 createStory: function() {8 return story;9 }10};11module.exports = {12 hasKeyword: function(keyword) {13 if (keyword == 'keyword') {14 return true;15 }16 return false;17 }18};19var story = require('story');20module.exports = {21 createStory: function() {22 return story;23 },24 hasKeyword: function(keyword) {25 return story.hasKeyword(keyword);26 }27};28var story = require(require.resolve('story'));29module.exports = {30 createStory: function() {31 return story;32 },33 hasKeyword: function(keyword) {34 return story.hasKeyword(keyword);35 }36};
Using AI Code Generation
1var root = require('storybook-root');2var story = root.getStory('test');3var hasKeyword = story.hasKeyword('test');4console.log(hasKeyword);5var root = require('storybook-root');6var story = root.getStory('test');7var keywords = story.getKeywords();8console.log(keywords);9var root = require('storybook-root');10var story = root.getStory('test');11var keyword = story.getKeyword('test');12console.log(keyword);13var root = require('storybook-root');14var story = root.getStory('test');15var keywords = story.getKeywords();16console.log(keywords);17var root = require('storybook-root');18var story = root.getStory('test');19var keyword = story.getKeyword('test');20console.log(keyword);21var root = require('storybook-root');22var story = root.getStory('test');23var keywords = story.getKeywords();24console.log(keywords);25var root = require('storybook-root');26var story = root.getStory('test');27var keyword = story.getKeyword('test');28console.log(keyword);29var root = require('storybook-root');30var story = root.getStory('test');31var keywords = story.getKeywords();32console.log(keywords);33var root = require('storybook-root');34var story = root.getStory('test');35var keyword = story.getKeyword('test');36console.log(keyword);37var root = require('storybook-root');38var story = root.getStory('test');39var keywords = story.getKeywords();40console.log(keywords);41var root = require('storybook-root');42var story = root.getStory('test');
Using AI Code Generation
1var storybook = require('storybook-root');2var story = new storybook.Story();3var hasKeyword = story.hasKeyword();4var story = require('story');5var storybook = function() {6 this.hasKeyword = function() {7 };8};9module.exports = storybook;10var story = function() {11 this.hasKeyword = function() {12 };13};14module.exports = story;
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.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!