[drf | recipe test] Build a Backend REST API - 37

Hyeseong·2021년 3월 8일
0

Add tests for listing recipes💮

현재까지 recipe/tests/폴더 안에는

  • test_ingredients_api.py
  • test_tags_api.py

두 가지 파일이 있는데요. 추가로 teest_reipe_api.py 파일을 작성할게요.

파일 이름이 워낙 직관적이라서 쉽게 이해하겠지만 recipe api 기능을 테스트하기 위한 소스코드를 짜볼게요.

test 🉐

from ... import ...

필요한 클래스와 메서드와 모듈을 임포트 할게요.

전역 변수와 함수 ㊙

global scope에서 사용할 RECIPES_URL 변수와, sample_recipe함수를 선언할게요. (테스트마다 간단히 메서드 하나로 recipe 객체를 생성하기 위함임)

sample_recipe 함수에서 눈여겨 볼만한 점이 update() 메서드인데요. 기존 default(딕셔너리)에서 해당 키가 존재하면 value의 값을변경해주고 만약 'key가 없으면 key-value`를 더 해주는 방식이에요.

PublicRecipeApiTests 클래스 선언 💯

로그인 하지 않고 해당 URL에 접근했을때 401 UNAUTHORIZED 오류를 발생시키게 해줘요.

PrivateRecipeApiTests 클래스 선언 ⚜

1개의 셋업 메서드와 2개의 테스트 메서드를 작성해볼게요.
셋업 메서드는 기존 셋업 메서드와 크게 다르지 않아요(유저 생성, 인증)

test_retrieve_recipes

여기서는 한명의 유저가 2개의 recipe를 db에 등록하는데요.

그리고 클라이언트에서 get요청을 RECIPES_URL 엔드포인트로 보내게 되요.
all()메서드를 통해서 모든 레시피의 퀴레셋을 가져오게 되요.

그래서 이 쿼리셋은 RecipeSerializer클래스의 인자로 들어가고 many=True flag를 작성합니다.

반환시 성공하는 200코드와 response해서 갈 body의 json과 직렬화한 data의 값이 같은지 비교해요.

If the field is used to represent a to-many relationship, you should add the many=True flag to the serializer field.

test_recipes_limited_to_user ♻

다른 유저 B가 동일한 recipe를 만들고 A라는 유저가 같은 레시피를 만들었을때의 test 소스코드에요.

바로 위의 테스트 코드와 큰 차이는 보이지 않지만 본인이 등록한 레시피만 가져오게 되요.

차이점: all()로 가져오냐? filter()로 가져오냐?

test 돌려보기 🔰

예상했던 fail이 뜨네요. RecipeSerializer 클래스를 임포트하지 못했다고 합니다.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글