2012-02-12 16 views
7

私は自分のアプリケーションをテストしていて、アプリケーション自体とは何の関係もないように見えます。私はこのようなユニットテストを持っています。TypeError:int()引数はDjangoの 'AnonymousUser'ではない文字列または数字でなければなりません

class TagSaveAndLoadTest(TestCase): 
    fixtures = ['users.json'] 

    def setUp(self): 
     self.client = Client() 
     self.client.login(user='test_user', password='123') 

    def test_register_save(self): 
     tag_dict = { 
         'sex' : 4, 
         'drugs' : 3, 
         'rocknroll' : 1, 
        } 
     response = self.client.post('/register/save_tags/', {'skilltags' : json.dumps(tag_dict)}) 
     self.assertEqual(response.status_code, 200) 

エラーはTypeError: int() argument must be a string or a number, not 'AnonymousUser'です。トレースバックに表示されるファイルはbase.pymanages.pyquery.pyなどです。私の要求がミドルウェアのどこかに詰まっているようで、対処方法がわかりません。要求が私の見解やコントローラに到達しないようにすることは、どのように可能ですか? 'setUp()'関数がテストユーザーをログに記録するとAnonymousUserに問題があるのはなぜですか?

フルトレースバックがあります。here、ありがとうございます!

答えて

4

トレースバックであまり威圧しないようにしてください。あなたが必要とする情報は、すべてのDjango内部を十分に上回って調べる場合です。要求はあなたの見解に達していますが、問題はミドルウェアにはありません。 client.login呼び出しが機能していないようです。 request.userは、匿名ユーザー

Skill.objects.filter(user=request.user).delete() 

テストでclient.loginラインを印刷してみているので、次のフィルタ文は失敗します。

  1. フィクスチャの正しいユーザ名とパスワードを使用していますか?
  2. ユーザーフィクスチャを正常にロードしています。あなたは正しいファイル名を持っていますか? Djangoのコンベンションは、sがないuser.jsonです。
  3. テストクラスがDjango TestCaseクラスをサブクラス化して、フィクスチャがロードされるようにしてください。
2

問題は、このコード行である:あなたはORMの列条件の値としてユーザオブジェクトを渡している

File "E:\ev\site\project\..\project\jobs\views.py", line 69, in post 
    Skill.objects.filter(user=request.user).delete() 

。これはあなたの見解ではありませんか?

関連する問題