Open syzymon opened 5 years ago
To ja się podłączę do pytania, dostaję bardzo podobny error:
AssertionError: Lists differ: [{'bytes': 1054423946, 'composer': None, 'me[1884 chars]239}] != [{'album_id': '227', 'bytes': '1054423946', [2024 chars]99'}]
First differing element 0:
{'bytes': 1054423946, 'composer': None, 'me[143 chars]2820}
{'album_id': '227', 'bytes': '1054423946', [157 chars].99'}
Diff is 5807 characters long. Set self.maxDiff to None to see it.
A pierwszy element mojej odpowiedzi w jsonie jest następujący:
{"bytes": 1054423946, "composer": null, "media_type_id": 3, "name": "Occupation / Precipice", "unit_price": "1.99", "milliseconds": 5286953, "genre_id": 19, "album_id": 227, "track_id": 2820}
Ponadto zastanawia mnie dlaczego ja w polu composer mam "null", a @syzymon "Battlestar Galactica". Odpowiedź wyświetlam za pomocą Response(json.dumps(moja_lista), mimetype='application/json')
Jakakolwiek wskazówka będzie mile widziana.
Tak jak w przykładowej odpowiedzi, należy wszystko rzutować na stringa, np. {"album_id":"1","bytes":"11170334","composer":"Angus Young, Malcolm Young, Brian Johnson","genre_id":"1","media_type_id":"1","milliseconds":"343719","name":"For Those About To Rock (We Salute You)","track_id":"1","unit_price":"0.99"}
a co do composer to miałem tam po prostu niepotrzebnego joina :) Po tym już przeszło testy.
Faktycznie należy rzutować na stringa wszystkie typy danych, bo niestety autor tej testowej bazy użył w niej w paru miejscach bardzo dziwnych typów, które nie chcą się ładnie same konwertować do jsona.
Zaraz uzupełnię informacje w poleceniu.
Odpowiedź wyświetlam za pomocą
Response(...)
dużo wygodniej by było zrobić jsonify(moja_lista)
Też mam problem z testami w tym zadaniu:
Pierwszy element mojego JSONa wygląda tak: [ { "album_id": "227", "bytes": "1054423946", "composer": null, "genre_id": "19", "media_type_id": "3", "milliseconds": "5286953", "name": "Occupation / Precipice", "track_id": "2820", "unit_price": "1.99" }, ..]
Mój pierwszy wiersz (przechodzi testy) wygląda następująco {"album_id":"227","bytes":"1054423946","composer":"None","genre_id":"19","media_type_id":"3","milliseconds":"5286953","name":"Occupation / Precipice","track_id":"2820","unit_price":"1.99"}
Więc widzę róznice taką, że Ty masz null a ja mam "None". To jest jakas kwestia rzutowania wyniku na stringa (ewentualnie być może problem z tym, że coś się nie zrzutowało na pythonowego None czy coś, na początek wszystko zrzutuj na stringa) (Twój null to nie string).
EDIT: Ok, problem rozwiązany (teraz nagle działa) A może ktoś wie dlaczego dostaje taki error?
Traceback (most recent call last):
File "/home/runner/unit_tests.py", line 16, in test_get_10_longest
response_dict = json.loads(response.text)
File "/usr/local/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Moja odpowiedź na endpoincie /longest_tracks to:
[{"album_id":"227","bytes":"1054423946","composer":"None","genre_id":"19","media_type_id":"3","milliseconds":"5286953","name":"Occupation / Precipice","track_id":"2820","unit_price":"1.99"},{"album_id":"229","bytes":"1059546140","composer":"None","genre_id":"21","media_type_id":"3","milliseconds":"5088838","name":"Through a Looking Glass","track_id":"3224","unit_price":"1.99"},{"album_id":"253","bytes":"536824558","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2960293","name":"Greetings from Earth, Pt. 1","track_id":"3244","unit_price":"1.99"},{"album_id":"253","bytes":"577829804","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2956998","name":"The Man With Nine Lives","track_id":"3242","unit_price":"1.99"},{"album_id":"253","bytes":"521387924","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2956081","name":"Battlestar Galactica, Pt. 2","track_id":"3227","unit_price":"1.99"},{"album_id":"253","bytes":"541359437","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2952702","name":"Battlestar Galactica, Pt. 1","track_id":"3226","unit_price":"1.99"},{"album_id":"253","bytes":"551759986","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2935894","name":"Murder On the Rising Star","track_id":"3243","unit_price":"1.99"},{"album_id":"253","bytes":"554509033","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2927802","name":"Battlestar Galactica, Pt. 3","track_id":"3228","unit_price":"1.99"},{"album_id":"253","bytes":"512381289","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2927677","name":"Take the Celestra","track_id":"3248","unit_price":"1.99"},{"album_id":"253","bytes":"536784757","composer":"None","genre_id":"20","media_type_id":"3","milliseconds":"2926593","name":"Fire In Space","track_id":"3239","unit_price":"1.99"}]
Cześć, mam problem z przejściem testów w zadaniu 5.2. Repl.it zwraca mi coś takiego:
Jak widać zwraca różnicę już na samym początku listy. Pierwszy element mojej odpowiedzi w JSON'ie:
{"album_id":"227","bytes":"1054423946","composer":"Battlestar Galactica","genre_id":"19","media_type_id":"3","milliseconds":"5286953","name":"Occupation / Precipice","track_id":"2820","unit_price":"1.99"}
EDIT: Problem rozwiązany, od początku nie rzutowałem wszystkiego na stringa, tak jak w przykładowej odpowiedzi. Poza tym join w polu "composer" nie jest potrzebny, należy wziąć pole bezpośrednio z tracks.