一番簡単な Cypress テストを試す。
テスト対象はこれ Vite + React + TypeScript Hello, World! を使用します。
npm install cypress --save-dev
./cypress.config.js を用意:
import { defineConfig } from 'cypress';
export default defineConfig({
e2e: {
browser: 'chrome',
baseUrl: 'http://localhost:8000',
specPattern: 'cypress/**/*.cy.ts',
video: false,
},
});
See for more details: https://docs.cypress.io/app/references/configuration
空のファイル cypress/support/e2e.js を作成:
mkdir -p cypress/support
touch cypress/support/e2e.js
cypress/test/div.cy.ts を用意:
mkdir cypress/test
touch cypress/test/div.cy.ts
内容は次の通り:
describe('div', () => {
it('hello world', () => {
cy.visit('/')
cy.get('div').should('contain.text', 'Hello, World!')
})
});
./src/App.tsx を確認:
function App() { return ( <div>Hello, World!</div> ); } export default App;
テストを実行・・・その前にまず React を起動:
npm run dev
テストを実行:
npx cypress run
./src/App.tsx:
function App() {
return (
<ul>
<li>Pikachu</li>
<li>Eevee</li>
<li>Pidgeot</li>
</ul>
);
}
...
このようなポケモンリストがあったとして、先頭が Pikachu であることをテストする:
touch cypres/test/pokemons.cy.ts
pokemons.cy.ts:
describe('pokemons', () => {
it('pikachu', () => {
cy.visit('/')
cy.get('li').first().should('contain.text', 'Pikachu')
})
});
npx cypress run を実行してテストがパスするか確かめます。
二番目三番目はどうやって確認するのか?
これ:
describe('pokemons', () => {
it('pikachu', () => {
cy.visit('/')
cy.get('li').eq(0).should('contain.text', 'Pikachu')
cy.get('li').eq(1).should('contain.text', 'Eevee')
cy.get('li').eq(2).should('contain.text', 'Pidgeot')
})
});
npx cypress run を実行してテストがパスするか確かめます。
./src/App.tsx が次のような場合:
function App() {
return (
<>
<ul>
<li><label><input type="radio"/>Pikachu</label></li>
<li><label><input type="radio"/>Eevee</label></li>
<li><label><input type="radio"/>Pidgeot</label></li>
</ul>
<ul>
<li><label><input type="radio"/>Pikachu</label></li>
<li><label><input type="radio"/>Eevee</label></li>
<li><label><input type="radio"/>Pidgeot</label></li>
</ul>
</>
);
}
ここで最初の Eevee のラジオボタンをクリックするには?
cypress/test/pokemons.cy.ts を次のように記述:
describe('pokemons', () => {
it('pikachu', () => {
cy.visit("/")
cy.get('label').filter(':contains("Eevee")').children('input').first().click();
});
});
Eevee がチェックされているかをテストするには?
describe('pokemons', () => {
it('pikachu', () => {
cy.visit("/")
cy.get('label').filter(':contains("Eevee")').children('input').first().click();
cy.get('label').filter(':contains("Eevee")').children('input').first().should("be.checked");
});
});
もしチェックされていないことを確認したい場合
cy.get('label').filter(':contains("Eevee")').children('input').first().should("not.be.checked");
また Pikachu 文字列を持つ label 要素が2個出現していることを確かめるには:
describe('pokemons', () => {
it('pikachu', () => {
cy.visit("/")
cy.get('label').filter(':contains("Pikachu")').should('have.length', 2);
});
});
以上です。