2017-10-05 11 views
0

を持っていない:ジャンゴ&パイソンはAttributeError:「小売業者」オブジェクトは、私のテストファイルでは何の属性

class TestMakeSoup(TestCase): 
    fixtures = ['deals_test_data.json'] 

    def test_string_is_valid(self): 
     s = Retailer.objects.get(pk=1) 
     with open('/home/danny/PycharmProjects/askarby/deals/tests/BestBuyTest.html', 'r') as myfile: 
      text = myfile.read().replace('\n', '') 
    self.assertTrue(s.make_soup(text)) 

ファイルでは、それはテストです:

class retailer(): 
    ''' 
    Retail site, drawn from database queryset object 
    ''' 
    def __init__(self,r_object): 
     ''' 
     Initializes retailer variables 
     obj -> nonetype 

     Precondition: r_object.currency == 3 
     Precondition: r_object.name != None 
     ''' 
     assert len(r_object.currency) == 3, "{} must be a three-letter string (eg 'USD').".format(r_object.currency) 
     assert r_object.name != None, "Name must exist." 
     assert r_object.deal_container_css != None, "Title css must exist." 
     assert r_object.title_css != None, "Title css must exist." 
     assert r_object.price_css != None, "Price css must exist." 
     self.name = r_object.name 
     self.base_url = r_object.base_url 
     self.currency = r_object.currency 
     #dict containing css lookup values for various fields 
     self.css = {} 
     self.css['container'] = self.extract_css(r_object.deal_container_css) 
     self.css['title'] = self.extract_css(r_object.title_css) 
     self.css['product_model'] = self.extract_css(r_object.product_model_css) 
     self.css['price'] = self.extract_css(r_object.price_css) 
     self.css['old_price'] = self.extract_css(r_object.old_price_css) 
     self.css['brand'] = self.extract_css(r_object.brand_css) 
     self.css['image'] = self.extract_css(r_object.image_css) 
     self.css['description'] = self.extract_css(r_object.description_css) 
     self.css['exclude'] = self.extract_css(r_object.exclude_css) 
     self.css['shipping'] = self.extract_css(r_object.shipping_css) 

     #dict containing associated clearance urls for retailer 
     self.clearance_urls = self.get_clearance_urls() 

     #dict to house final list of deals 
     self.deals = {} 


    def __str__(self): 
     return self.name 

    def make_soup(self, text): 
     assert isinstance(text,str), "text must be string." 
     soup = bs4.BeautifulSoup(text, "html.parser") 
     if soup: 
      return soup 
     return False 

Retailer呼び出しが私の中Retailerモデルを指し、お得情報アプリ。

Error 
Traceback (most recent call last): 
    File "/home/danny/PycharmProjects/askarby/deals/tests/test_deals.py", line 101, in test_string_is_valid 
    self.assertTrue(s.make_soup(text)) 
AttributeError: 'Retailer' object has no attribute 'make_soup' 

はなぜメソッドとして実行されていないmake_soupされています 私はこのエラーを取得しますか?

+0

クラス名をチェックすると、 'make_soup'は実際に' Retailer'クラスに存在しますか? –

+0

はい。問題は、実際にクラスを作成していないことでした。 – RubyNoob

答えて

0

小売業者クラスは、データベースから取得したオブジェクトを受け取ります。データベースからオブジェクトを取得しましたが、クラスを作成しませんでした。

def test_makesoup(self): 
    z = Retailer.objects.get(pk=1) 
    s = dealscan.retailer(z) 
    with open('/home/danny/PycharmProjects/askarby/deals/tests/BestBuyTest.html', 'r') as myfile: 
     text = myfile.read().replace('\n', '') 
    self.assertTrue(s.make_soup(text)) 

が解決します。

関連する問題