Testing in Cypress to determine if one date is half a year before another can be achieved using date manipulation functions and assertions

I'm currently working on testing an SVG graph with dynamic dates on the x-axis. For demonstration purposes, let's assume that the early date is 'Feb 22' and the later date is 'Aug 22'.

While I can extract values from each element in the graph and save them as variables, I'm struggling to figure out how to verify that the early date is always 6 months before the later date using Cypress. This is what I have so far:

//To retrieve the value of the later date
cy.get("laterDateSelector").invoke('text').as('val');
  cy.get('@val').then((val) => {
   let laterDate = val;
//Assertion, this is where I'm stuck
cy.get('earlyDateSelector').should('equal', 'Need this part to be equal: laterDate minus 6 months in the format MMM yy');

Answer №1

If you utilize the dayjs library, the process becomes quite simple.

Your date strings can be parsed directly, followed by conducting subtraction on the $M attributes.

import dayjs from 'dayjs';

it('verifies a 6-month gap between dates', () => {
  
  cy.get("earlyDateSelector").invoke('text').then(earlyDate => {       // 'Feb 22'
    cy.get("laterDateSelector").invoke('text').should(laterDate => {     // 'Aug 22'

      const early = dayjs(`01 ${earlyDate}`)  // '01 Feb 22'
      const later = dayjs(`01 ${laterDate}`)  // '01 Aug 22'

      expect(later.$M - early.$M).to.eq(6)

      // alternatively, for better handling across different years

      expect(end.diff(start, 'M')).to.eq(6)

    })
  })
})

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

AngularJS: Utilizing a single 'partial form' for creating and updating articles

For the example, let's consider a simple form with just one text input. I would like to put it in a partial so that I can include other inputs and have a single form for both creating and updating the artist. Partial Code <input name="name" type= ...

Tips for adding up data tables in CodeIgniter

The output is displaying as $NaN ( $NaN total) I followed the code example from datatables and made modifications to the column for SUM function. Here is my code snippet: <script> $(document).ready(function() { $('#tableoperasional').Data ...

Dealing with cascading menu in knockout viewmodel

I have incorporated knockoutjs into my current project. One particular requirement I encountered was the need to create a nested menu within my viewmodel. Here is how I implemented it: self.menu = [ { name: 'Services', su ...

In my Vue project, I am required to extract only the numerical value from a select option text and disregard the rest of the text

Currently, I am in the process of learning Vue and have taken on the task of creating a basic tax calculator. The challenge is to display the result in real-time without requiring a "show total value" button. Everything seems to be functioning well except ...

Arrange photos in a grid using React Dropzone uploaders

I'm having trouble figuring out how to create a custom preview similar to an image set in a grid using the react-dropzone-uploader component for uploading multiple files. Currently, when I upload images, they are displayed as shown in my normal uploa ...

Utilizing GCE API within my website

Currently, my goal is to retrieve GCE information in a read-only manner to showcase infrastructure data on my website. To achieve this, I aim to acquire an OAuth2 token using the JS API and then transmit it to a Python Backend for GCE API calls. It's ...

How to align an unordered list vertically in the center using Bootstrap?

Trying to figure out why the ul within this parent div is not centered vertically. Here is a screenshot of the issue: https://i.sstatic.net/ZOc9M.png <div className=" d-flex align-items-center bg-primary "> <ul ...

Angular2 - Breaking down applications into reusable components

Utilizing custom properties permits seamless data binding between multiple components. <section id="main"> <app-home [dict]="dict">Hello there!</app-home> </section> In this scenario, dict serves ...

Issue with jQuery click event not triggering on dynamically created input boxes for removal

Having some trouble with the remove buttons not working on dynamically generated text boxes. The click function doesn't seem to be triggering, and I'm a bit stuck. Any ideas on what might be causing this issue? Take a look at the following co ...

Is my input file in Javascript valid and does it exist? Here's how to check

In my Javascript code, I am retrieving strings from a text file. When the user inputs an incorrect or invalid file name, I want to display a message. For example: console.log("Your input is invalid"); Here is the code snippet that reads the text file and ...

Assistance from Meteor for storing Cached Cursors

I have a Template that features a select element allowing users to filter through a collection of Objects displayed on a table. The result of the select is stored in a ReactiveVar, which is then utilized in querying a Helper to retrieve the Objects for the ...

The class name is not defined for a certain child element in the icon creation function

Currently, I am developing a Vue2 web application using Leaflet and marker-cluster. I am encountering an issue with the iconCreateFunction option in my template: <v-marker-cluster :options="{ iconCreateFunction: iconCreateClsPrg}"> ...

The display of 'App' seems to be experiencing issues within the render method

Can someone help me with this issue? I am encountering the following error: Uncaught Error: Invariant Violation: Element type is invalid - expected a string for built-in components or a class/function for composite components, but received an object. Bel ...

The Challenge of Page Refresh in Express and Node.js

I am new to web development and servers, having only taken one course in university. I am facing a strange issue with a GET request where it stops being sent after multiple refreshes. Here is the output from npm start when it is working: GET / 304 0.350 m ...

Struggling to send data to child components in Vue: Received an object instead of the expected string value of "[object Object]"

My goal is to create a basic To-Do app where, upon clicking the button <b-button v-on:click="newItem" pill variant="primary">Add</b-button>, the input text is displayed below. To achieve this, I am using v-model in the input field (located in ...

Obtain information about a div element while scrolling

Looking to enhance my social feed page by adding a view count feature for each post. The challenge is figuring out how to keep track of views as the user scrolls down the page. Any suggestions? ...

Form submission causing page to reload, getElementById function fails to return value, rendering form ineffective

The objective of this code snippet is to extract data from a form using IDs and store it in an array object named studRec. The entire process is intended to be carried out on the client-side in order to preserve the data for future use in other functions. ...

Ionic 2: Inconsistency detected in the expression after it was verified

After going through this response, this solution and this advice (as well as numerous others), I still find myself struggling to comprehend how to resolve this issue in my current approach. The task at hand involves creating an event countdown timer that ...

rails neglecting to include in the array

Could someone help me with this block of code I have: doc.xpath("//script[@type='text/javascript']/text()").each do |text| if text.content =~ /more_options_on_polling/ price1 = text.to_s.scan(/\"(formatted_total_price)\ ...

The confirm() function shows up before the background on a blank layout

I'm facing an issue where whenever my confirm() function pops up, the alert box displays correctly but then the background turns blank. I've tried various solutions like moving the entire if statement to the bottom of the page or at the end of th ...