Python

2016-04-07 10 views
1

'daki bir nesnenin yapıcısını bir web sayfasından verileri ayrıştıran bir işlevi test etmek istiyorum, ancak testimin HTML kodunu veya interneti değiştirmeye bağlı olmasını istemiyorum, böylece web sayfalarını kaydediyorum. Python

url_query = "http://www.allocine.fr/film/fichefilm-%s/similaire/" %allocine_id 
response = requests.get(url_query) 
soup = BeautifulSoup(response.text, "html.parser") 

Yani benim testte yaptılar:

def test_Allocine_matrix_reloaded(self): 
    #Load result Matrix allocine API 
    test_file = open(MATRIX_RELOADED_TEST_FILE) 
    matrix_reloaded_data = json.load(test_file) 
    test_file.close() 

    #Load result Matrix sim allocine webpage 
    test_page = open(MATRIX_RELOADED_TEST_FILE) 
    matrix_reloaded_sim_page = test_page.read() 
    test_page.close() 

    #Mocking functions 
    allocine.get_allocine_info = mock.MagicMock(return_value=matrix_reloaded_data) 
    requests.get = mock.MagicMock(return_value=matrix_reloaded_sim_page) 

Ama hata var:

Traceback (most recent call last): 
    File "info_allocine_test.py", line 34, in test_Allocine_matrix_reloaded 
    friends_allocine_info = allocine.AllocineInfo(matrix_realoaded_allocine_id) 
    File "info_allocine_flat.py", line 116, in __init__ 
    sim_allocine['sim'] = scrap_similar_movie_allocine(allocine_id) 
    File "info_allocine_flat.py", line 255, in scrap_similar_movie_allocine 
    soup = BeautifulSoup(response.text, "html.parser") 
AttributeError: 'str' object has no attribute 'text' 

istediğim işlevinde sorun bende test etmek HTML kodunu soup değişkeninde almak için nasıl yapabilirim? (Unite ve alay kullanıyorum)

cevap

2

Burada yapılacak en iyi şey, bu üç satırı, indirilen metni veya BeautifulSoup nesnesini döndüren ayrı bir yönteme veya işleve çıkarmak olacaktır. Gerçek işleviniz metni indirmek için bunu çağırabilir, ancak testiniz tüm işlevle dalga geçebilir.

+0

Sorun şu anda hala mevcut: Elimde: AttributeError: 'str' nesnesinin 'find_all' özelliği yokken bunu yapmaya çalışıyorum: sim_movie_links = soup.find_all ("h2") – mel

+0

Ben ' güncellenmiş kodunuzu görmeden nasıl yardımcı olabileceğimi biliyorum. Ancak, alay edilen yönteminizden bir BS nesnesinden ziyade bir dize döndürdüğünüz anlaşılıyor. –

+0

Hatamı anladım, çok teşekkürler :) – mel