codeception을 cakephp3로 다루는 튜토리얼
6799 단어 codeceptioncakephp3
연말이 되면 아무것도 없는데 즐거움을 느끼네요!
14일째는 @ 가슴씨의 기사가 됩니다.
CakePHP Migrations limit 옵션 정보
codeception이란?
php에 의한 테스트 프레임 워크입니다.
유닛 테스트, 펑셔널 테스트, 수락 테스트 모두에 대응하여 직관적인 쓰기가 가능합니다. 문서도 충실하기 때문에 한 번 시도해보십시오.
h tp : // 코데세 p 치온. 코m/
시도한 환경
주의
phantomjs를 사용할 수도 있지만 움직이지 않는 함수가 있으므로 권장하지 않습니다.
google chrome + chromedriver 소개
아래 URL을 참고하여 자신의 환경에 chrome과 chromedriver를 도입하십시오.
애플리케이션 작성
테스트하는 애플리케이션이 없으면 시작되지 않으므로 처음부터 만들어 갑시다.
composer create-project --prefer-dist cakephp/app codeception
DB 설정
config/app.php
를 자신의 DB 설정에 맞게 설정합니다.'username' => 'app_test',
'password' => 'app_test_P@ssw0rd',
'database' => 'app_test',
모델, 템플릿 생성
Pages라는 모델을 적절하게 만듭니다.
bin/cake bake migration CreatePages title:string content:text
bin/cake migrations migrate
bin/cake bake all pages
chmod 777 tmp/
chmod -R 666 tmp/*
config/routes.php
를 다음과 같이 수정$routes->connect('/', ['controller' => 'Pages', 'action' => 'index', 'home']);
$routes->resources('Pages');
지금까지 기본 응용 프로그램의 병아리가 완성되었습니다.
codeception 도입
드디어 codeception을 도입해, 테스트를 써 갑니다.
composer require "codeception/codeception" --dev
초기에 만든 tests 폴더가 필요 없으므로 일단 삭제하십시오.
vendor/bin/codecept bootstrap
이제 tests 폴더와 필요한 파일이 생성됩니다. 여기서 다음을 실행하면 다음과 같은 화면이 됩니다.
vendor/bin/codecept run functional
구성 파일에 작성
chrome driver를 사용해 폼의 입력등을 실시하고 싶으므로, 초기 설정을 기술합니다.
codeception.yml
paths:
tests: tests
output: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
actor_suffix: Tester
extensions:
enabled:
- Codeception\Extension\RunFailed
modules:
config:
Db:
dsn: 'mysql:host=localhost;dbname=your database name'
user: 'your database name'
password: 'your database pass'
tests/functional.suite.yml
actor: FunctionalTester
extensions:
enabled:
- Codeception\Extension\Recorder:
delete_successful: false
- Codeception\Extension\RunProcess:
0: bin/chromedriver --url-base=wd/hub
sleep: 3
modules:
enabled:
# add a framework module here
- \Helper\Functional
- Db
# - DataFactory:
# depends: Doctrine2
# - \Helper\Factories
- WebDriver:
url: 'http://localhost'
browser: chrome
port: 9515
window_size: 1024x768
capabilities:
chromeOptions:
args: ["--headless", "--disable-gpu", "--disable-extensions"]
binary: "/usr/bin/google-chrome"
기본 테스트 작성
그럼 테스트를 써 봅시다!
첫째, 테스트의 병아리를 생성합니다.
vendor/bin/codecept g:cest functional PagesCest
tests/functional/PagesCest.php
<?php
class PagesCest
{
public function _before(FunctionalTester $I)
{
}
public function _after(FunctionalTester $I)
{
}
// tests
public function addPage(FunctionalTester $I)
{
$I->amOnPage('/pages/add');
$I->fillField('title', 'アドベントカレンダー初参加です');
$I->fillField('content', 'お手柔らかによろしくお願いします!');
$I->click('Submit');
$I->see('アドベントカレンダー初参加です');
}
}
테스트를 실행한 후 기사가 작성되었음을 알 수 있습니다.
삭제 방법에 대한 대응
이번에는 작성한 항목을 삭제해 봅시다.
이전 파일에 다음 메소드를 추가합니다.
public function deletePage(FunctionalTester $I)
{
$I->amOnPage('/pages');
$I->acceptPopup($I->click('Delete'));
$I->see('The page has been deleted.');
}
acceptPopup 함수로 팝업 시 OK 버튼을 누르고 있습니다.
데이터베이스 내용을 직접 확인
다음은 데이터베이스의 내용을 직접 확인합시다.
public function seeRecord(FunctionalTester $I)
{
$I->seeInDatabase('pages', ['title' => 'アドベントカレンダー初参加です']);
}
타이틀이 "어드벤트 캘린더 첫 참가입니다"로 되어 있는 레코드가 존재하면 테스트가 통과합니다.
로그인에 필요한 테스트
그 밖에도 codeception에서는 로그인 정보를 유지하면서 테스트를 해 나갈 수 있습니다. 다음과 같이 작성하면 세션을 유지하면서 테스트를 수행할 수 있습니다.
만든 함수를 각 테스트 파일의
_after
안에 써서 사용합니다.tests/_support/FunctionalTester.php
public function login($username, $password)
{
$I = $this;
// セッションがあったらログイン処理をスキップする
if ($I->loadSessionSnapshot('login')) {
return;
}
$I->amOnPage('/users/login');
$I->fillField('username', $username);
$I->fillField('password', $password);
$I->click('ログイン');
// ログイン状態を保持する
$I->saveSessionSnapshot('login');
}
Reference
이 문제에 관하여(codeception을 cakephp3로 다루는 튜토리얼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keisukefunatsu/items/9b57a6e29a93c764068e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)