성공적으로 젠드 프레임 워크 2 "Getting Started" 튜토리얼을 수행 한 후, 나는 그대로를 이어 Unit testing example for version 2.1에 시작하고, 나는 phpunit을과 실패를 얻을 :후행 슬래시로 인해 zend framework 2.1 예를 따르는 assertRedirectTo()와 관련된 phpunit에서 오류를 해결하는 방법은 무엇입니까?
Failed asserting response redirects to "/album", actual redirection is "/album/"
여기에 IndexControllerTest.php
파일에서 코드의 관련 비트입니다 :
public function testAddActionRedirectsAfterValidPost() {
$albumTableMock = $this->getMockBuilder('Album\Models\AlbumTable')
->disableOriginalConstructor()
->getMock();
$albumTableMock->expects($this->once())
->method('saveAlbum')
->will($this->returnValue(null));
$serviceManager = $this->getApplicationServiceLocator();
$serviceManager->setAllowOverride(true);
$serviceManager->setService('Album\Models\AlbumTable', $albumTableMock);
$postData = array('title' => 'Led Zeppelin III', 'artist' => 'Led Zeppelin');
$this->dispatch('/album/add', 'POST', $postData);
$this->assertResponseStatusCode(302);
$this->assertRedirectTo('/album');
}
내가 AlbumController.php
내 addAction()
함수 내에서이 무엇3210
.htaccess
파일은 스켈레톤 애플리케이션과 함께 제공되는 것으로, 브라우저에서 http://localhost/zf2-tut/album
및 http://localhost/zf2-tut/album/
이 제대로 처리되고 항목을 추가하는 과정에서 실제로 리디렉션된다는 테스트를 거쳤습니다. 나 후행 슬래시와 함께 URL로 다시.
나는 이것이 약간의 persnickety로서 벗어날지도 모르지만 나는 이것과 같은 문제를 해결하는 적절한 방법을 배우고 싶습니다.
어설 션 테스트를 후행 슬래시를 포함하도록 변경할 수 있지만 예제가 따르지 않고 toRoute() 메소드에 후행 슬래시가 없으므로 아마도 내가 실수 한 것으로 추정합니다. 내 코드 또는 환경을 어딘가에두고 테스트를 수행하는 데있어 테스트를 벗어나는 것이 나쁜 습관이라고 가정합니다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 어딘가에서 후미 슬래시로 해결할 URL을 변경 한 경우 실제로이 경우 선호하지만 내 코드가 깨끗하고 애매하게 남겨 두지 않으므로 경로에 대한 정보를 명확하게 표시하고 싶습니다. 후행 슬래시가 예상됨을 나타냅니다.
참고로, 나는 개인적인 취향의 문제로 "모델"로 "모델"변화에 튜토리얼을 수행 한 후에도 내 폴더 구조와 네임 스페이스의 작은 변화를했다. 그것은 결코이 문제 (afaik)에 영향을 미치지 않습니다. 그러나 나는 그것이 붉은 청어가 아니기 때문에 그것을 지적하고 싶었습니다.
편집 : 나는 좀 더 취재와 함께, 내 질문을 게시 직후 내가 후행 슬래시가이 경우에 내 경로에 추가되는 방식 실현 및 게시 그 대답한다. 그러나 필자가 대답 한 바에 따르면 Zend Framework 2가 왜 선택적 일 때 슬래시를 추가하는지 이해하고 싶습니다. 또한 PHPUnit을 사용하여 올바르게 테스트하는 방법을 알고 싶습니다.
더 많은 연구와 연구 끝에 Zend_Test에'assertRedirectRegex();'메소드가 있음을 발견했습니다. 실험 후, 다음 줄이이 테스트의 유효성을 검사하는 가장 좋은 방법 인 것으로 나타났습니다. $ this-> assertRedirectRegex ('/ \ {0,1} $ /'); – shadowzen
후행 슬래시의 유무와 일치해야하지만 두 개 이상의 후행 슬래시가있는 경우 실패합니다. 이 작업을 수행 할 수있는 더 좋은 방법이 있다면 알려주십시오. 아직도 Zend \ Mvc가 옵션 인 경우 Zend \ Mvc가 강제로 슬래시를 강제하는 이유는 여전히 알지 못하지만 적어도 향후 테스트에서 해당 동작이 변경되면 적어도 내 테스트는 통과합니다. – shadowzen