Best JavaScript code snippet using jest
buildBody.test.js
Source: buildBody.test.js
1const proxyquire = require("proxyquire");2const sinon = require("sinon");3const { assert } = require("chai");4const defaultMocks = {5 buildCommentDetails: () => null,6 uncoveredFileLinesByFileNames: () => [],7 mergeFileLinesWithChangedFiles: () => [],8 buildGithubCommentTitle: () => "Barecheck - Code coverage report"9};10const buildBodyMock = (mocks) => {11 const {12 buildCommentDetails,13 uncoveredFileLinesByFileNames,14 mergeFileLinesWithChangedFiles,15 buildGithubCommentTitle16 } = {17 ...defaultMocks,18 ...mocks19 };20 return proxyquire("../../../src/github/comment/buildBody", {21 "./buildDetails": buildCommentDetails,22 "../../lcov": { uncoveredFileLinesByFileNames },23 "../../coverage": { mergeFileLinesWithChangedFiles },24 "../utils": { buildGithubCommentTitle }25 });26};27describe("github/comment/buildDetails", () => {28 it("buildCommentDetails should be called with proper args once changedFiles arr is empty", async () => {29 const changedFiles = [];30 const coverageDiff = 1;31 const totalCoverage = 3;32 const compareFileData = [];33 const uncoveredFileLines = [{ test: 1 }];34 const fileLinesWithChangedFiles = [{ some: 4 }];35 const uncoveredFileLinesByFileNames = sinon36 .stub()37 .returns(uncoveredFileLines);38 const mergeFileLinesWithChangedFiles = sinon39 .stub()40 .returns(fileLinesWithChangedFiles);41 const buildCommentDetails = sinon.stub().returns("");42 const buildBody = buildBodyMock({43 buildCommentDetails,44 uncoveredFileLinesByFileNames,45 mergeFileLinesWithChangedFiles46 });47 await buildBody(changedFiles, coverageDiff, totalCoverage, compareFileData);48 assert.isTrue(buildCommentDetails.calledOnce);49 assert.deepEqual(buildCommentDetails.firstCall.args, [50 fileLinesWithChangedFiles51 ]);52 });53 it("buildCommentDetails should be called with proper args when we have changed files", async () => {54 const changedFiles = [55 {56 filename: "test.txt"57 }58 ];59 const coverageDiff = 1;60 const totalCoverage = 3;61 const compareFileData = [];62 const uncoveredFileLines = [{ test: 1 }];63 const fileLinesWithChangedFiles = [{ some: 4 }];64 const uncoveredFileLinesByFileNames = sinon65 .stub()66 .returns(uncoveredFileLines);67 const mergeFileLinesWithChangedFiles = sinon68 .stub()69 .returns(fileLinesWithChangedFiles);70 const buildCommentDetails = sinon.stub().returns("");71 const buildBody = buildBodyMock({72 buildCommentDetails,73 uncoveredFileLinesByFileNames,74 mergeFileLinesWithChangedFiles75 });76 await buildBody(changedFiles, coverageDiff, totalCoverage, compareFileData);77 assert.isTrue(uncoveredFileLinesByFileNames.calledOnce);78 assert.deepEqual(uncoveredFileLinesByFileNames.firstCall.args, [79 ["test.txt"],80 compareFileData81 ]);82 assert.isTrue(buildCommentDetails.calledOnce);83 assert.deepEqual(buildCommentDetails.firstCall.args, [84 fileLinesWithChangedFiles85 ]);86 });87 it("should return body text", async () => {88 const changedFiles = [];89 const coverageDiff = 1;90 const totalCoverage = 3;91 const compareFileData = [];92 const uncoveredFileLines = [];93 const fileLinesWithChangedFiles = [];94 const commentDetailsMessage = "detailed message";95 const uncoveredFileLinesByFileNames = sinon96 .stub()97 .returns(uncoveredFileLines);98 const mergeFileLinesWithChangedFiles = sinon99 .stub()100 .returns(fileLinesWithChangedFiles);101 const buildCommentDetails = sinon.stub().returns(commentDetailsMessage);102 const buildBody = buildBodyMock({103 buildCommentDetails,104 uncoveredFileLinesByFileNames,105 mergeFileLinesWithChangedFiles106 });107 const body = await buildBody(108 changedFiles,109 coverageDiff,110 totalCoverage,111 compareFileData112 );113 assert.deepEqual(114 body,115 "<h3>Barecheck - Code coverage report</h3>Total: <b>3%</b>\n\nYour code coverage diff: <b>1% â´</b>\n\ndetailed message"116 );117 });118 [119 [-10, "â¾"],120 [10, "â´"],121 [0, false]122 ].forEach(([coverageDiff, arrow]) => {123 it(`should return body text with ${arrow}`, async () => {124 const changedFiles = [];125 const totalCoverage = 3;126 const compareFileData = [];127 const uncoveredFileLines = [];128 const fileLinesWithChangedFiles = [];129 const commentDetailsMessage = "detailed message";130 const uncoveredFileLinesByFileNames = sinon131 .stub()132 .returns(uncoveredFileLines);133 const mergeFileLinesWithChangedFiles = sinon134 .stub()135 .returns(fileLinesWithChangedFiles);136 const buildCommentDetails = sinon.stub().returns(commentDetailsMessage);137 const buildBody = buildBodyMock({138 buildCommentDetails,139 uncoveredFileLinesByFileNames,140 mergeFileLinesWithChangedFiles141 });142 const body = await buildBody(143 changedFiles,144 coverageDiff,145 totalCoverage,146 compareFileData147 );148 if (arrow) {149 assert.isTrue(body.includes(arrow));150 } else {151 assert.isFalse(body.includes("â¾"));152 assert.isFalse(body.includes("â´"));153 }154 });155 });...
Elimination.js
Source: Elimination.js
1/* now we have Array PrimeImplicants = [ object implicant , object implicant , .. ]2 * PrimeImplicants[0] --> object implicant = {baseValue: 1, bitsCovered: [2,4], isChecked: false, 3 * isDontCare: false, degree: 1, mintermsCoverd: [1,3,5,7]}4 * in the end of this file we must have an Array of RemaningPI like this :5 * Array RemaningPI = [ object implicant , object implicant , .. ]6 * RemaningPI[0] = {baseValue: 1, bitsCovered: [2,4], isChecked: false, isDontCare: false, degree: 0, mintermsCoverd: [1,3]}7 */89var remainingImplicants;10var uncoveredMinTerms;1112function eliminationProcess() {13 //duplicate primeImplicants array into remainingImplicants14 remainingImplicants = primeImplicants.slice();15 uncoveredMinTerms = minTerms.slice();16 while (uncoveredMinTerms.length>0 && (checkEssentialImplicants() || checkRowDominance() || checkColumnDominance()));17}1819function checkEssentialImplicants() {20 //sparse array to store how many implicants21 //each minterm is covered by22 //the value for minterms not included will be undefined23 var termsCoverCount = [];2425 var essentialImplicantFound = false;2627 //iterate on all implicant and increment the count28 //for each min term they cover29 for (var i=0; i<remainingImplicants.length; i++) {30 var primeImplicant = remainingImplicants[i];3132 for (var j=0; j<primeImplicant.mintermsCovered.length; j++) {33 var term = primeImplicant.mintermsCovered[j]3435 //if first time to cover a term, initialize its place with 136 if (termsCoverCount[term] == undefined) {37 termsCoverCount[term] = 1;38 } else {39 termsCoverCount[term]++;40 }41 }42 }4344 for (var i=0; i<uncoveredMinTerms.length; i++) {4546 //if a term is only covered by one implicant,47 //find the implicant and add it to resultImplicants48 if (termsCoverCount[uncoveredMinTerms[i]] == 1) {49 for (var j=0; j<remainingImplicants.length; j++) {5051 var primeImplicantMinterms = remainingImplicants[j].mintermsCovered;5253 if (primeImplicantMinterms.includes(uncoveredMinTerms[i])) {5455 //remove all minterms this implicant covers56 for (var k=0; k<primeImplicantMinterms.length; k++) {57 if (uncoveredMinTerms.includes(primeImplicantMinterms[k])) {58 var termIndex = uncoveredMinTerms.indexOf(primeImplicantMinterms[k]);59 uncoveredMinTerms.splice(termIndex,1)60 }61 }6263 //add implicant to resultImplicants and remove it from remainingImplicants64 resultImplicants.push(remainingImplicants[j]);65 remainingImplicants.splice(j,1);66 essentialImplicantFound = true;67 break;68 }6970 }71 }72 }7374 return essentialImplicantFound;75}7677//compares every two rows to check for row dominance78function checkRowDominance() {79 //var rowDominanceFound = false;8081 for (var i=0; i<remainingImplicants.length; i++) {82 for (var j=0; j<remainingImplicants.length; j++) {83 if (i==j) continue;8485 //if dominance found, remove the dominated row86 if (rowDominates(remainingImplicants[i], remainingImplicants[j])) {87 remainingImplicants.splice(j,1);88 return true;89 //rowDominanceFound = true;90 }9192 }93 }94 return false;95 //return rowDominanceFound;96}9798//checks if the first implicant row-dominates the second implicant99function rowDominates(imp1, imp2) {100 //counters to check if both implicants cover the same minterms101 var termsCount1 = 0;102 var termsCount2 = 0;103104 for (var i=0; i<imp2.mintermsCovered.length; i++) {105106 var termInImp2 = imp2.mintermsCovered[i];107108 if (uncoveredMinTerms.includes(termInImp2)) {109 if (!imp1.mintermsCovered.includes(termInImp2)) {110 return false;111 } else {112 termsCount2++;113 }114 }115 }116117 for (var i=0; i<imp1.mintermsCovered.length; i++) {118 var termInImp1 = imp1.mintermsCovered[i];119 if (uncoveredMinTerms.includes(termInImp1)) {120 termsCount1++;121 }122 }123124 if (termsCount1 == termsCount2) {125 return false;126 }127 return true;128}129130//compares every two columns to check for column dominance131function checkColumnDominance() {132 //var columnDominanceFound = false;133134 for (var i=0; i<uncoveredMinTerms.length; i++) {135 for (var j=0; j<uncoveredMinTerms.length; j++) {136 if (i==j) continue;137138 //if dominance found, remove the dominated column139 if (columnDominates(uncoveredMinTerms[i], uncoveredMinTerms[j])) {140 uncoveredMinTerms.splice(j,1);141 return true;142 //columnDominanceFound = true;143 }144 }145 }146 return false;147 //return columnDominanceFound;148}149150//checks if the first minterm column-dominates the second minterm151function columnDominates(term1, term2) {152 for (var i=0; i<remainingImplicants.length; i++) {153 var currentImplicantTerms = remainingImplicants[i].mintermsCovered;154155 if (currentImplicantTerms.includes(term1) && !currentImplicantTerms.includes(term2)) {156 return false;157 }158 }159 return true;
...
corpuscoverage.js
Source: corpuscoverage.js
1var path = require('path'),2 util = require('util'),3 fs = require('fs');4var salient = require('./../');5var args = process.argv;6if (!args || args.length < 5) {7 console.log('usage: node corpuscoverage en.wik.dist en.wik.vocab en-brown.tag.vocab');8 return;9}10var wikDistFile = args[2];11var wikVocabFile = args[3];12var corpusVocabFile = args[4];13function readDist(file) {14 var dist = {};15 var lines = fs.readFileSync(file).toString().split('\n');16 for (var l = 0; l < lines.length; l++) {17 var line = lines[l];18 if (line.indexOf('#') == 0) {19 continue;20 }21 var items = line.split('\t');22 if (items.length != 4) {23 continue;24 }25 var i = parseInt(items[0]);26 var tag = items[1];27 var freq = items[2];28 dist[tag] = { i: i, t: tag, f: freq };29 }30 return dist;31};32function readDict(file, corpus) {33 var vocab = {};34 var lines = fs.readFileSync(file).toString().split('\n');35 for (var l = 0; l < lines.length; l++) {36 var line = lines[l];37 var items = line.split('\t');38 if (!items || items.length < 2)39 continue;40 if (corpus) {41 // TOKEN FREQUENCY POS/FREQ,POS/FREQ OR TOKEN FREQUENCY42 var w = items[0].toLowerCase();43 vocab[w] = { freq: parseInt(items[1]), id: l.toString(), w: w }44 if (items.length > 2) {45 vocab[w].pos = items[2];46 }47 }48 else if (items.length > 2) {49 // ID TOKEN POS,POS50 var w = items[1].toLowerCase();51 vocab[w] = { pos: items[2], id: items[0], w: w };52 }53 }54 vocab._length = lines.length;55 return vocab;56}57function mapCorpus(vocab, dist) {58 for (var v in vocab) {59 var pos = vocab[v].pos;60 if (pos) {61 var result = [];62 var resultFreq = [];63 var items = pos.split(',');64 for (var i = 0; i < items.length; i++) {65 var item = items[i].split('/');66 var tag = item[0];67 var tagFreq = item[1];68 if (typeof dist[tag] != 'undefined') {69 var tagId = dist[tag].i;70 if (result.indexOf(tagId) < 0) {71 result.push(tagId);72 resultFreq.push(tagFreq);73 }74 }75 }76 vocab[v].pos = result.join(',');77 vocab[v].posFreq = resultFreq.join(',');78 }79 }80}81var dict = readDict(wikVocabFile, false);82var corpusV = readDict(corpusVocabFile, true);83var distribution = readDist(wikDistFile);84mapCorpus(corpusV, distribution);85// Determine whether the corpus is a subset, supset, overlap or disjoint set of the vocabulary86var corpusCovered = 0;87var corpusUncovered = 0;88var uncoveredOutput = path.join(__dirname, 'uncovered.corpus.vocab');89var coveredOutput = path.join(__dirname, 'covered.corpus.vocab');90var uncoveredSorted = [];91var coveredSorted = [];92for (var c in corpusV) {93 if (typeof dict[c] != 'undefined') {94 coveredSorted.push(corpusV[c]);95 corpusCovered++;96 }97 else {98 var item = corpusV[c];99 // determine if the item falls under a numeric or money category ala regex100 if (c.match(/\$?\d+/)) {101 continue;102 }103 uncoveredSorted.push(item);104 corpusUncovered++;105 }106}107uncoveredSorted = uncoveredSorted.sort(function (a, b) { return b.freq - a.freq });108for (var i = 0; i < corpusUncovered; i++) {109 var item = uncoveredSorted[i];110 var additionLine = util.format('%s\t%s\t%s\t%s\n', dict._length + i, item.w, item.pos, item.posFreq);111 fs.appendFileSync(uncoveredOutput, additionLine);112}113coveredSorted = coveredSorted.sort(function (a, b) { return b.freq - a.freq });114for (var i = 0; i < corpusCovered; i++) {115 var item = coveredSorted[i];116 var additionLine = util.format('%s\t%s\t%s\t%s\n', dict._length + i, item.w, item.pos, item.posFreq);117 fs.appendFileSync(coveredOutput, additionLine);118}119// Determine whether the vocabulary is a subset, supset, overlap or disjoint set of the corpus120var countCovered = 0;121var countUncovered = 0;122for (var c in dict) {123 if (typeof corpusV[c] != 'undefined') {124 countCovered++;125 }126 else {127 countUncovered++;128 }129}130console.log(util.format('%s found in vocab, %s not found in vocab. %s% covered', corpusCovered,131 corpusUncovered, Math.round(100 * corpusCovered / (corpusCovered + corpusUncovered))));132console.log(util.format('%s found in corpus, %s not found in corpus. %s% covered', countCovered,...
county-data-checker.js
Source: county-data-checker.js
1const _ = require('underscore');2function printStatusReportOnNewUpdate(countyToPostalCodes, reportResults, censusData, electionData) {3 var postalCodeCounts = 0;4 var countyStateCounts = 0;5 _.each(countyToPostalCodes, (val, key) => {6 postalCodeCounts += val.length;7 countyStateCounts++;8 });9 console.log(`Found ${postalCodeCounts} postal codes.`);10 console.log(`Found ${countyStateCounts} county state name mappings.`);11 const dateLogs = {};12 const reportSet = new Set();13 var countyStateReportCounts = 0;14 var coveredPostalCodeCounts = 0;15 var uncoveredCensusCounts = 0;16 const uncoveredCensusSet = new Set();17 var uncoveredElectionCounts = 0;18 const uncoveredElectionSet = new Set();19 const ignoredElectionSet = new Set(['69', '72', '78']);20 _.each(reportResults, result => {21 const currentDate = result.currentDate;22 if (Object.prototype.hasOwnProperty.call(dateLogs, currentDate)) {23 dateLogs[currentDate]++;24 } else {25 dateLogs[currentDate] = 1;26 }27 countyStateReportCounts++;28 if (Object.prototype.hasOwnProperty.call(countyToPostalCodes, result.fips)) {29 coveredPostalCodeCounts += countyToPostalCodes[result.fips].length;30 }31 reportSet.add(result.fips);32 if (!Object.prototype.hasOwnProperty.call(censusData.county, result.fips)) {33 uncoveredCensusSet.add(result.fips);34 uncoveredCensusCounts++;35 }36 if (!Object.prototype.hasOwnProperty.call(electionData.county, result.fips)) {37 const s = result.fips.substring(0, 2);38 if (!ignoredElectionSet.has(s)) {39 uncoveredElectionSet.add(result.fips);40 uncoveredElectionCounts++;41 }42 }43 });44 var unreachableCountyStateCounts = 0;45 const unreachableCountyStateSet = new Set();46 _.each(countyToPostalCodes, (val, key) => {47 if (reportSet.has(key)) {48 reportSet.delete(key);49 } else {50 unreachableCountyStateCounts += 1;51 unreachableCountyStateSet.add(key);52 }53 });54 console.log(`Of the ${countyStateReportCounts} county reports, date distribution are as follows.`);55 console.log(dateLogs);56 console.log(`This covers ${coveredPostalCodeCounts} out of ${postalCodeCounts} postal codes.`);57 console.log(`${reportSet.size} out of ${countyStateReportCounts} county reports cannot be reached.`);58 console.log(reportSet);59 console.log(`${unreachableCountyStateCounts} out of ${countyStateCounts} county states have no data associated.`);60 console.log(unreachableCountyStateSet);61 console.log(`${uncoveredCensusCounts} out of ${countyStateReportCounts} county reports have no percentage.`);62 console.log(uncoveredCensusSet);63 console.log(`${uncoveredElectionCounts} out of ${countyStateReportCounts} county reports have no election results.`);64 console.log(uncoveredElectionSet);65 if (uncoveredCensusCounts > 0) {66 throw Error('Some counties do not have population count');67 }68}69function deduplicateArray(results, fun) {70 const set = new Set();71 const newResults = [];72 _.each(results, v => {73 const p = fun(v);74 if (!set.has(p)) {75 newResults.push(v);76 set.add(p);77 }78 });79 return newResults;80}81module.exports = {82 deduplicateArray: deduplicateArray,83 printStatusReportOnNewUpdate: printStatusReportOnNewUpdate...
flow-highlight-source.js
Source: flow-highlight-source.js
1$(function() {2 // Convert the text area into a CodeMirror area in readOnly mode.3 var cm = CodeMirror.fromTextArea(document.querySelector("textarea"), {4 readOnly: true,5 lineNumbers: true,6 mode: "text/typescript",7 scrollbarStyle: "simple",8 gutters: [9 "Flow-lineuncovered",10 "CodeMirror-linenumbers"11 ]12 });13 // TODO: handle corrupted coverage data?14 var coverageData = JSON.parse(document.querySelector("#file-coverage-data").textContent);15 var uncoveredLocs = coverageData.expressions.uncovered_locs;16 // Create uncovered range markers.17 for (var loc of uncoveredLocs) {18 cm.markText(19 {line: loc.start.line - 1, ch: loc.start.column - 1},20 {line: loc.end.line - 1, ch: loc.end.column},21 {22 className: "cm-flow-uncovered",23 }24 );25 }26 // Create uncovered ranges scrollbar annotations.27 var scrollbarAnnotations = cm.annotateScrollbar({28 className: "cm-flow-uncovered",29 listenForUpdates: false,30 });31 scrollbarAnnotations.update(uncoveredLocs.map(function (loc) {32 return {33 from: {line: loc.start.line - 1, ch: loc.start.column -1},34 to: {line: loc.end.line - 1, ch: loc.start.column},35 };36 }));37 // Create the line gutters.38 for (var i = 0; i < cm.lineCount(); i++) {39 var count = uncoveredLocs.reduce(function (acc, loc) {40 if (i >= loc.start.line - 1 && i <= loc.end.line - 1) {41 acc += 1;42 }43 return acc;44 }, 0);45 if (count > 0) {46 var el = document.createElement("div");47 el.textContent = count + "x";48 el.style.textAlign = "center";49 el.style.fontSize = "0.6em";50 var color = "rgba(255,0,0," + count * 0.2 + ")";51 el.style.background = color;52 cm.setGutterMarker(i, "Flow-lineuncovered", el);53 }54 }55 // Refresh the uncovered range markers background alpha56 // (number of time the marker span appears in an uncovered range * alpha step).57 CodeMirror.on(cm, "viewportChange", function(cm, marker){58 for (var el of document.querySelectorAll(".cm-flow-uncovered")) {59 var count = Array.from(el.classList).filter(function (cls) {60 if (cls !== "cm-flow-uncovered") {61 return false;62 }63 return true;64 }).length;65 var color = "rgba(255,0,0," + count * 0.2 + ")";66 el.style.background = color;67 }68 });69 // Configure the dropdowns70 $('.ui.dropdown.uncovered-locations')71 .dropdown({72 action: 'hide',73 onChange: function (value) {74 if (value == "") {75 return;76 }77 $('.ui.dropdown.uncovered-locations').dropdown('set value', "");78 cm.scrollIntoView({line: parseInt(value)}, 150);79 }80 });81 $('.ui.dropdown.syntax-highlighting')82 .dropdown({83 onChange: function (value) {84 var mode = "typescript";85 switch (value) {86 case "es":87 mode = "text/typescript";88 break;89 case "js":90 mode = "javascript";91 break;92 default:93 mode = "";94 }95 console.log("SET MODE", mode);96 cm.setOption("mode", mode);97 }98 });...
complementary.js
Source: complementary.js
1/*2 * SonarQube3 * Copyright (C) 2009-2018 SonarSource SA4 * mailto:info AT sonarsource DOT com5 *6 * This program is free software; you can redistribute it and/or7 * modify it under the terms of the GNU Lesser General Public8 * License as published by the Free Software Foundation; either9 * version 3 of the License, or (at your option) any later version.10 *11 * This program is distributed in the hope that it will be useful,12 * but WITHOUT ANY WARRANTY; without even the implied warranty of13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU14 * Lesser General Public License for more details.15 *16 * You should have received a copy of the GNU Lesser General Public License17 * along with this program; if not, write to the Free Software Foundation,18 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.19 */20// @flow21export const complementary = {22 coverage: ['uncovered_lines', 'uncovered_conditions'],23 line_coverage: ['uncovered_lines'],24 branch_coverage: ['uncovered_conditions'],25 uncovered_lines: ['line_coverage'],26 uncovered_conditions: ['branch_coverage'],27 new_coverage: ['new_uncovered_lines', 'new_uncovered_conditions'],28 new_line_coverage: ['new_uncovered_lines'],29 new_branch_coverage: ['new_uncovered_conditions'],30 new_uncovered_lines: ['new_line_coverage'],31 new_uncovered_conditions: ['new_branch_coverage'],32 duplicated_lines_density: ['duplicated_lines'],33 new_duplicated_lines_density: ['new_duplicated_lines'],34 duplicated_lines: ['duplicated_lines_density'],35 new_duplicated_lines: ['new_duplicated_lines_density']...
CoveredOrUncovered.js
Source: CoveredOrUncovered.js
1var invert = require('invert-obj');2function CoveredOrUncovered (coveredOrUncovered) {3 this.message = coveredOrUncovered;4}5CoveredOrUncovered.prototype.value = function () {6 return this.message;7};8CoveredOrUncovered.Keys = {9 'COVERED': '0',10 'UNCOVERED': '1',11};12CoveredOrUncovered.Tag = '203';13CoveredOrUncovered.Type = 'INT';14CoveredOrUncovered.Values = invert(CoveredOrUncovered.Keys);...
LegCoveredOrUncovered.js
Source: LegCoveredOrUncovered.js
1var invert = require('invert-obj');2function LegCoveredOrUncovered (legCoveredOrUncovered) {3 this.message = legCoveredOrUncovered;4}5LegCoveredOrUncovered.prototype.value = function () {6 return this.message;7};8LegCoveredOrUncovered.Tag = '565';9LegCoveredOrUncovered.Type = 'INT';...
How to test parallel, mocked data requests in JEST whilst simulating cached responses with a 500ms threshold
Jest mock timers not working as expected asynchronously; how to make this test pass?
Travis/Jest: TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#<process>'
Migrating create-react-app from javascript to typescript
Test failing cases with React, Jest, React-Testing-Library
How do I test a jest console.log
Jest mock window object before importing a dependency
How to test methods inside functional component using enzyme as instance() returns null for shallow wrapper?
Using Jest property matchers on arrays of objects
What is the scope of mocks in jest?
It looks like your first tests don't work properly as well.
So for data loaded within 500ms the output should be "A1B1", else, after 500ms, it should be "A2B2" and so on.
But later you said
Tests for the data "A1B1", "B1C1" are fine, but because the latency (in the mockLoading function) is always above the 500ms threshold, I am not able to get the right results for data returned after that. In effect, "A2B2" and "B2C2" always fail.
Easiest way will be to pass time to requestAandB
and requestBandC
, because using Math.random()
can give you random numbers and might fail tests randomly. So try this approach:
test('Test cache timings ', () =>
Promise.all([
// send two requests in parallel after 0 ms (immediately)
expect(requestAandB(0)).resolves.toEqual('A1B1'),
expect(requestBandC(0)).resolves.toEqual('B1C1'),
// send two requests in parallel after 480 ms
expect(requestAandB(480)).resolves.toEqual('A1B1'),
expect(requestBandC(480)).resolves.toEqual('B1C1'),
// send two requests in parallel after 520 ms
expect(requestAandB(520)).resolves.toEqual('A2B2'),
expect(requestBandC(520)).resolves.toEqual('B2C2'),
// send two requests in parallel after 360 ms
expect(requestAandB(360)).resolves.toEqual('A1B1'),
expect(requestBandC(360)).resolves.toEqual('B1C1'),
// send two requests in parallel after 750 ms
expect(requestAandB(750)).resolves.toEqual('A2B2'),
expect(requestBandC(750)).resolves.toEqual('B2C2'),
]));
index.js
const { loadDataA, loadDataB, loadDataC } = require('./get-data.js');
async function requestAandB(time) {
const temp = await Promise.all([
loadDataA(time),
loadDataB(time),
loadDataC(time),
]); // don't use global Promise outside of this function
return temp.filter((_, i) => i < 2).join('');
}
async function requestBandC(time) {
const temp = await Promise.all([
loadDataA(time),
loadDataB(time),
loadDataC(time),
]); // don't use global Promise outside of this function
return temp.filter((_, i) => i > 0).join('');
}
module.exports = { requestAandB, requestBandC };
get-data.js
// get-data.js
const { wait } = require('./wait.js');
async function mockLoading(time, str) {
await wait(time);
// here is the logic if time is less then 500ms then append 1 else append 2
let label = str;
if (Math.ceil(time / 500) <= 1) {
label += '1';
} else {
label += '2';
}
return label;
}
module.exports = {
loadDataA: async time => mockLoading(time, 'A'),
loadDataB: async time => mockLoading(time, 'B'),
loadDataC: async time => mockLoading(time, 'C'),
};
Check out the latest blogs from LambdaTest on this topic:
Node js has become one of the most popular frameworks in JavaScript today. Used by millions of developers, to develop thousands of project, node js is being extensively used. The more you develop, the better the testing you require to have a smooth, seamless application. This article shares the best practices for the testing node.in 2019, to deliver a robust web application or website.
This article is a part of our Content Hub. For more in-depth resources, check out our content hub on Selenium JavaScript Tutorial.
Storybook offers a clean-room setting for isolating component testing. No matter how complex a component is, stories make it simple to explore it in all of its permutations. Before we discuss the Storybook testing in any browser, let us try and understand the fundamentals related to the Storybook framework and how it simplifies how we build UI components.
JavaScript is one of the most widely used programming languages. This popularity invites a lot of JavaScript development and testing frameworks to ease the process of working with it. As a result, numerous JavaScript testing frameworks can be used to perform unit testing.
There’s always an edge in learning new tools and technologies. As the market evolves, it’s constantly changing how we build our websites. One of the top benefits of why you should learn Next.js is how proficient we become when it comes to website development. This creates a perfect opportunity for companies that decide to trust the actual capabilities and functionalities offered by modern technologies such as Next.js.
LambdaTest’s Jest Testing Tutorial covers step-by-step guides around Jest with code examples to help you be proficient with the Jest framework. The Jest tutorial has chapters to help you learn right from the basics of Jest framework to code-based tutorials around testing react apps with Jest, perform snapshot testing, import ES modules and more.
|<p>it('check_object_of_Car', () => {</p><p>
expect(newCar()).toBeInstanceOf(Car);</p><p>
});</p>|
| :- |
Get 100 minutes of automation test minutes FREE!!