Django测试对象不可调用

时间:2014-02-19 12:09:47

标签: python django django-testing

我正在尝试在下面创建一个测试,我收到了这条消息:

TypeError:'datetime.datetime'对象不可调用

就行了:self.stock.expiry_date(昨天)

测试

 def test_stock_passed_expiration(self):
        """
        'True' returned when stock is passed it's expiration date.
        """
        yesterday = date.today()-timedelta(days=1)
        self.stock.expiry_date(yesterday)
        self.assertEqual(self.stock.has_expried(), True)

型号:

class Stock(models.Model):
    product = models.ForeignKey(Product, related_name="stocks")
    expiry_date = models.DateTimeField(default=timezone.now)


    def has_expried(self):
        if timezone.now > self.expiry_date:
            return True
        return False

3 个答案:

答案 0 :(得分:2)

你有

self.stock.expiry_date(yesterday)

但意味着

self.stock.expiry_date = yesterday

您试图将self.stock.expiry_date(日期时间对象)视为一个函数,导致该错误消息。

答案 1 :(得分:1)

在测试函数中,您调用expiry_date就好像它是一个函数一样。相反,将self.expiry_date属性设置为昨天,保存模型,您的测试应该有效。

def test_stock_passed_expiration(self):
    """
    'True' returned when stock is passed it's expiration date.
    """
    yesterday = date.today()-timedelta(days=1)
    self.stock.expiry_date = yesterday
    self.stock.save()
    self.assertEqual(self.stock.has_expried(), True)

答案 2 :(得分:1)

使用

self.stock.expiry_date = yesterday
self.stock.save()

self.stock.set(expiry_date=yesterday).save()

相反会帮助你