Created
January 21, 2022 23:08
-
-
Save adamdehaven/aba81d5951c931c44260212e98c69bde to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| cy.get('.button').click().then(() => { | |
| cy.wrap(Cypress.vueWrapper.emitted()).should('have.property', 'click-forgot-password-link') | |
| }) |
Author
@lmiller1990
Here’s a full spec example:
it("emits a 'register-success' event with a payload on successful registration", () => {
mount(KongAuthRegister)
cy.intercept('POST', '**/register', {
body: {
organizationID: '187e2b65-ec69-421c-a7ba-3e946c4e5077',
},
}).as('register-request')
cy.getTestId(testids.fullName).type('Player One')
cy.getTestId(testids.organization).type('Test Organization')
cy.getTestId(testids.email).type('user1@email.com')
cy.getTestId(testids.password).type('TestPassword1!')
cy.getTestId(testids.agreeCheckbox).check()
cy.getTestId(testids.form).submit()
cy.wait('@register-request').its('response.body').should('have.property', 'organizationID').then(() => {
// Check for emitted event
cy.wrap(Cypress.vueWrapper.emitted()).should('have.property', 'register-success').then(() => {
cy.wrap(Cypress.vueWrapper.emitted('register-success')[0][0]).should('have.property', 'email')
cy.wrap(Cypress.vueWrapper.emitted('register-success')[0][0]).should('have.property', 'fromInvite')
})
})
})The actual component is wrapped in a Vue 3 custom element .ce.vue and is re-emitted with a body that looks like this:
{
email: 'user1@email.com',
fromInvite: false,
}Kind of related, it looks like all events emitted from .ce.vue file are wrapped in an array? I end up having to do Cypress.vueWrapper.emitted('register-success')[0][0]
Author
How would you access the emitted event (and it’s payload) instead?
Vuetify's next branch has a bunch of Cypress component testing examples. Button. They use TSX but you can do something like this:
const onRegister = cy.stub()
mount(KongAuthRegister, {
props: {
onRegisterSuccess: onRegister
}
})
cy.intercept('POST', '**/register', {
body: {
organizationID: '187e2b65-ec69-421c-a7ba-3e946c4e5077',
},
}).as('register-request')
// stuff ...
cy.wait('@register-request').its('response.body').should('have.property', 'organizationID').then(() => {
// Check for emitted event
expect(onRegister).to.have.been.calledWith(......) // <================== your object here??
})The trick is Vue turns @register-success into an onRegisterSuccess props when it compiles.
Example: lmiller1990/vue-3-cypress-vite#2
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @adamdehaven,
This example is pretty small - you could do it this way, though. I am generally not a fan of using
vueWrapperin my tests - if you have a more "real world" example, I'd be able to give you better advice!