জ্যাঙ্গোতে ফর্মগুলির জন্য আমার কীভাবে পরীক্ষা লিখতে হবে?


109

আমি পরীক্ষাগুলি লিখতে গিয়ে জ্যাঙ্গোতে আমার মতামতের অনুরোধগুলি অনুকরণ করতে চাই। এটি মূলত ফর্মগুলি পরীক্ষা করার জন্য। এখানে একটি সাধারণ পরীক্ষার অনুরোধের স্নিপেট রয়েছে:

from django.tests import TestCase

class MyTests(TestCase):
    def test_forms(self):
        response = self.client.post("/my/form/", {'something':'something'})
        self.assertEqual(response.status_code, 200) # we get our page back with an error

কোনও ফর্ম ত্রুটি আছে কিনা তা এই পৃষ্ঠাটি সর্বদা 200 এর প্রতিক্রিয়া দেয়। আমি কীভাবে পরীক্ষা করতে পারি যে আমার ফর্মটি ব্যর্থ হয়েছে এবং নির্দিষ্ট ক্ষেত্রটিতে ( soemthing) ত্রুটি হয়েছিল?

উত্তর:


250

আমি মনে করি আপনি যদি কেবল ফর্মটি পরীক্ষা করতে চান তবে আপনার কেবলমাত্র ফর্মটি পরীক্ষা করা উচিত, যেখানে ফর্মটি রেন্ডার করা হয়েছে তা নয়। একটি ধারণা পেতে উদাহরণ:

from django.test import TestCase
from myapp.forms import MyForm

class MyTests(TestCase):
    def test_forms(self):
        form_data = {'something': 'something'}
        form = MyForm(data=form_data)
        self.assertTrue(form.is_valid())
        ... # other tests relating forms, for example checking the form data

62
+1 টি। ইউনিট পরীক্ষার ধারণাটি প্রতিটি ইউনিটকে আলাদাভাবে পরীক্ষা করা।
ড্যানিয়েল রোজম্যান

13
@ ড্যানিয়েল তবে ইন্টিগ্রেশন পরীক্ষাগুলি আরও কার্যকর এবং বাগগুলি ধরার সম্ভাবনা বেশি।
wobbily_col

19
@wobbily_col ইন্টিগ্রেশন পরীক্ষায় আসল বাগটি কী তা চিহ্নিত করতে আরও সময় লাগে। ইউনিট পরীক্ষায় এটি আরও সুস্পষ্ট। আমি মনে করি একটি ভাল পরীক্ষার কভারেজের জন্য আপনার উভয় যাইহোকই হওয়া দরকার।
টর্স্টেন এঞ্জেলব্রেচ্ট

11
এভাবেই আপনি কোনও নির্দিষ্ট ফর্ম ত্রুটির জন্য যাচাই করেন:self.assertEquals(form.errors['recipient'], [u"That recipient isn't valid"])
এমিল স্টেনস্ট্রোম

18
self.assertEqual(form.is_valid(), True)সরল করা যেতে পারে:self.assertTrue(form.is_valid())
অ্যাডাম টেলর

76

https://docs.djangoproject.com/en/stable/topics/testing/tools/#django.test.SimpleTestCase.assertFormError

from django.tests import TestCase

class MyTests(TestCase):
    def test_forms(self):
        response = self.client.post("/my/form/", {'something':'something'})
        self.assertFormError(response, 'form', 'something', 'This field is required.')

যেখানে "ফর্ম" আপনার ফর্মের প্রসঙ্গের পরিবর্তনশীল নাম, "কিছু" ক্ষেত্রের নাম এবং "এই ক্ষেত্রটি প্রয়োজনীয় required" প্রত্যাশিত বৈধতা ত্রুটির সঠিক পাঠ্য।


এটি আমার জন্য একটি অ্যাটিটবুটআরার উত্থাপন করে: অ্যাট্রিবিউটআরার: 'সেফ ইউনিকোড' অবজেক্টটির কোনও বৈশিষ্ট্য 'ত্রুটি' নেই
স্বেচেলার

নবাগত ব্যবহারকারীদের জন্য: আগেই একটি ব্যবহারকারী তৈরি করুন এবং self.client.force_login(self.user)পরীক্ষার পদ্ধতিতে প্রথম লাইন হিসাবে ব্যবহার করুন ।
সাগৌরী

এই পোস্টে () নিয়ে আমার একটি সমস্যা ছিল, তখন আমি বুঝতে পেরেছিলাম যে আমাকে নিম্নোক্ত প্রতিক্রিয়া হিসাবে = = স্বীকৃতি। , 'বিভাগ': 1, 'দ্রষ্টব্য': 'নোট 123'}, সামগ্রী_type = django.test.client.MULTIPART_CONTENT) ফর্মটি সংরক্ষণের সময় যদি কোনও খালি উদাহরণ পেয়ে আটকে থাকে তবে ব্রাউজার থেকে প্রেরিত অনুরোধগুলি পরীক্ষা করুন
গালিব খালেদ

17

মূল 2011 এর উত্তর ছিল

self.assertContains(response, "Invalid message here", 1, 200)

তবে আমি এখন দেখছি (2018) প্রযোজ্য সংস্থাগুলির সম্পূর্ণ ভিড় উপলব্ধ রয়েছে :

  • assertRaisesMessage
  • assertFieldOutput
  • assertFormError
  • assertFormsetError

তোমারটা নাও.


+1 এটি আমার পক্ষে কাজ করেছিল যখন এটি একটি সাধারণ ফর্ম ত্রুটি ছিল যা ক্ষেত্রের সাথে সংযুক্ত করা হচ্ছে না।
অ্যারন লেলেভিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.