Mockery::close() 가 예외를 발생시키면 DatabaseTransactions 트레이트가 동작하지 않음

메소드 하나만 테스트 돌렸을 땐 통과되던게, 파일을 통으로 돌리니까 에러가 나더군요.

에러가 나는 원인을 보니, 데이터베이스에서 락이 걸렸기 때문이었습니다.

DatabaseTransactions 트레이트를 쓰고 있어서, 이전 테스트가 다음 테스트에 영향을 줄 이유가 전혀 없어보이는데, 대체 락이 왜 걸릴까? 찾다보니 원인은 Mockery 때문이었습니다. 이 링크 덕분에 알게 됐어요.  이 글 없었으면 며칠 날릴뻔 했네요. 소중한 정보 공유해준 얼굴 모를 개발자에게 오늘도 감사를!

Mockery를 쓰려고 했다가 필요 없어져서 테스트 코드에서는 Mockery 쓰는 부분을 다 제거했는데, 종료하는 코드를 남겨뒀더라구요.

public function tearDown() {
    Mockery::close();
}

종료할 Mockery가 없는데 종료를 해서 예외가 발생했었나봅니다. Mockery가 예외를 발생시키면, 트랜젝션이 롤백되지 않은채로 테스트가 멈추기 때문에 락이 걸린 채로 다음 테스트가 실행되나 봅니다.

위 코드를 제거하고 돌리니 잘 되네요.

오늘의 삽질 로그 끝

익혀야할 것

오늘 업무를 종료하며 내일은 아래 두 가지를 익혀야겠다고 생각했습니다.

  1. Laravel HTTP 테스트에서 Mockery를 사용하는 방법
  2. Laravel HTTP 테스트 실행시 xdebug 로 디버깅하는 방법

오늘은 테스트를 작성하면서 삽질을 많이했는데, 첫번째 것은 오늘 삽질 결과 알아낸 해결책이고, 두번째 것은 오늘과 같은 삽질을 덜 고통스럽게 하는 해결책입니다.

Laravel elixir version 기능이 제대로 작동하지 않는 경우

몇 주만에 라라벨로 만든 애플리케이션을 수정하려고 했는데, gulp 명령어를 실행하니 에러가 났습니다.

SyntaxError in plugin 'run-sequence(version)'
Message:
Unexpected token s in JSON at position 41
Stack:
SyntaxError: Unexpected token s in JSON at position 41
at Object.parse (native)
at VersionTask.deleteManifestFiles (/home/vagrant/Code/bookcafe100.com/node_modules/laravel-elixir/dist/tasks/VersionTask.js:113:29)
at VersionTask.gulpTask (/home/vagrant/Code/bookcafe100.com/node_modules/laravel-elixir/dist/tasks/VersionTask.js:71:18)
at VersionTask.run (/home/vagrant/Code/bookcafe100.com/node_modules/laravel-elixir/dist/tasks/Task.js:138:31)
at Gulp.<anonymous> (/home/vagrant/Code/bookcafe100.com/node_modules/laravel-elixir/dist/tasks/GulpBuilder.js:65:67)
at module.exports (/home/vagrant/Code/bookcafe100.com/node_modules/orchestrator/lib/runTask.js:34:7)
at Gulp.Orchestrator._runTask (/home/vagrant/Code/bookcafe100.com/node_modules/orchestrator/index.js:273:3)
at Gulp.Orchestrator._runStep (/home/vagrant/Code/bookcafe100.com/node_modules/orchestrator/index.js:214:10)
at Gulp.Orchestrator.start (/home/vagrant/Code/bookcafe100.com/node_modules/orchestrator/index.js:134:8)
at runNextSet (/home/vagrant/Code/bookcafe100.com/node_modules/run-sequence/index.js:86:16)

한참 삽질하다가 Elixir version is messing up 라는 글에서 ‘public/build/rev-manifest.json 파일이 아래와 같이 되어 있기 때문이라는 걸 알았습니다.

{
"js/app.js": "js/app-e81f312e80.js"
}s"
}

아직까지 rev-manifest.json 파일이 왜 저리 되었는지 원인은 못찾아냈습니다만, 문제를 유발하는 s” } 를 지우니 빌드가 됐습니다. 아오 답답해서 혼났네요.

 

leaderboard-728x90