Cypress Tips
Grep commands
Configs
# only runs filtered tests, not running all tests then filter what to run
--env.grepFilterSpecs=true
# completely omits test when test is filtered by grep, default is pending
--env.grepOmitFiltered=true
# 둘다 적용시
--env.'grepFilterSpecs=true,grepOmitFiltered=true'
Tag tests
describe('block with config tag', { tags: ['@smoke', '@fast'] }, () => {})
# @smoke tag가 있는 테스트만
--env.grepTags=@smoke
# @smoke tag가 없는 테스트만
--env.grepTags=-@smoke
# @smoke, @fast 둘 다 있는 테스트만(and)
--env.grepTags=@smoke+@fast
# @smoke, @fast 둘 중 하나라도 있는 테스트만(or)
--env.grepTags='@smoke @fast'
# tag 없는 테스트들
--env.grepUntagged=true
Fixtures
fixture | Cypress project root에서 root/cypress/fixtures/* 을 읽어오기에 해당 폴더에 원하는 파일을 넣어 DDT 염두에 둘 수도 있습니다
// root/cypress/fixtures/auth.json
{
"WRONG_ID": "user@user.com",
"WRONG_PW": "userpassword"
}
// root/e2e/test.cy.ts
cy.fixture('auth.json').then((auth) => {
getInputByPlaceholer('email').type(auth.WRONG_ID);
getInputByPlaceholer('password').type(auth.WRONG_PW);
});
Config
Testing Downloads
const downloadsFolder = Cypress.**config**('downloadsFolder');
it(
'As an admin, I should be able to download registration list',
() => {
getButtonByName('download waitlist csv').first().click();
cy.log(`Downloaded at: ${downloadsFolder}/waitlist.csv`);
cy.readFile(`${downloadsFolder}/waitlist.csv`, {
timeout: 15_000,
}).should('not.be.null');
}
);
Graphql
Working with GraphQL | Cypress 데이터가 있어야 렌더링되는 컴포넌트를 테스트 할 때 사용됩니다.
/**
* Utility to match GraphQL mutation based on the operation name
*/
export const hasOperationName = (
req: CyHttpMessages.IncomingHttpRequest,
operationName: string
) => {
const { body } = req
return (
Object.prototype.hasOwnProperty.call(body, 'operationName') &&
body.operationName === operationName
)
}
/**
* Alias query if operationName matches
* @example cy.wait('@gqlWaitlistConnectionQuery');
*/
export const aliasQuery = (req: CyHttpMessages.IncomingHttpRequest, operationName: string) => {
if (hasOperationName(req, operationName)) {
req.alias = `gql${operationName}Query`
}
}
// graphql의 data를 기다리는 예시
cy.intercept('https://apiToFetch.com', (req) => {
aliasQuery(req, 'PseImageRepositories')
aliasQuery(req, 'UserProfile')
})
cy.wait('@gql<apiToFetch>Query').its('response.body.data')
Stub
stub | Cypress Documentation jest.mockFn 과 유사한 기능을 수행합니다. 아래 예시는 cypress는 window.confirm이나 alert를 기본으로는 모두 accept하기에 stub을 이용해서 이를 dismiss하고 call이 되었는지 테스트합니다.
const stub = cy.stub().returns(false)
cy.on('window:confirm', stub)
cy.get('[data-testid=tag-wrapper] > svg')
.last()
.click()
.then(() => {
expect(stub.getCall(0))
})