-1

我尝试测试friend route我的烧瓶应用程序,但收到错误:

AttributeError: 'NoneType' object has no attribute 'data'

我可以测试模型但是当我想测试烧瓶时('你现在是朋友')我得到了上面的错误。

我不是烧瓶测试的专家。

你能告诉我出了什么问题,我该如何解决?

视图.py:

@layout.route('/friend/<name>')
@login_required
def friend(name):
        user = Users.query.filter_by(name = name).first()
        if user == g.user:
            flash('You can\'t Friend yourself!')
            return redirect(url_for('layout.user',page=1,sortby='normal'))
        u = g.user.be_friend(user)
        if u is None:
            flash('You have been Friend with ' + name + '.')
            return redirect(url_for('layout.user',page=1,sortby='normal'))
       db.session.add(u)
       db.session.commit()
       flash('You are now Friend with ' + name + '!')
       return redirect(url_for('layout.user', page=1,sortby='normal'))

测试.py:

 def test_friend(self):
        u1 = Users(name='monk1', email='monk1@example.com', age=25)
        u2 = Users(name='monk2', email='monk2@example.com', age=27)
        db.session.add(u1)
        db.session.add(u2)
        db.session.commit()
        response = self.assertTrue(u1.be_friend(u2))
        self.assertTrue('You have been Friend with monk2', response.data)
# I got error Here if I comment this line the test whole model.py works well But Now I want to test flash too that I get the mentioned error
4

2 回答 2

3

当你这样做

self.assertTrue('You have been Friend with monk2', response.data)

上一步中 response 的值已设置为None,结果response = self.assertTrue(u1.be_friend(u2))None。如果不满足条件,assertTrue则将引发错误,因此不会返回任何内容作为其输出,因此 is 的responseNone

由于None没有任何名为data的属性,因此会引发错误。

于 2015-02-26T13:36:24.700 回答
0

你的问题出在be_friend方法上:

def be_friend(self, user): #follow
    if not self.are_friends(user):
        self.is_friend.append(user)
        user.is_friend.append(self)
        return self

在这里,如果两个用户都已经是朋友,你什么都不返回(因此 Python 自动返回 None)。您可以通过将方法更改为:

def be_friend(self, user): #follow
    if not self.are_friends(user):
        self.is_friend.append(user)
        user.is_friend.append(self)
    return self

此外,使用assertIsNotNone而不是assertTrue可以帮助您捕获此错误。

您也不能将返回值分配为 HTTP 响应对象,因为您是直接调用您的方法,而不是您的视图。您可以按如下方式重写您的测试:

self.assertIsNotNone(u1.be_friend(u2))
self.assertTrue(u1.are_friends(u2))
于 2015-02-26T13:42:16.843 回答