Модульный тест для представления с пост-запросом и формой CKEditor в нем - PullRequest
0 голосов
/ 07 января 2019

У меня есть представление, которое отправляет сообщение, и оно содержит форму, которая использует CKEditor как часть этой формы, вот форма из forms.py

class CreateAdminPostForm(forms.ModelForm):
    content = forms.CharField(widget=CKEditorUploadingWidget())
    title = forms.CharField(
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Post Title',
                'class': 'form-control',
                'style': 'max-width: 800px;',
                'maxlength': '160',
            }
        )
    )
    keyword = forms.CharField(
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Focus Keyword',
                'maxlength': '60',
            }
        )
    )
    slug = forms.CharField(
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Slug',
                'maxlength': '60',
            }
        )
    )
    description = forms.CharField(
        widget=forms.Textarea(
            attrs={
                'placeholder': 'Post Description , Will be used as the Meta description for the post page',
                'style': 'height: 370px;',
                'maxlength': '160',
            }
        )
    )

    class Meta:
        model = Post
        fields = ['title', 'content', 'slug', 'keyword', 'category', 'description', 'featured_image']

и вот представление, которое я использую в views.py

def admin_post(request):
    current_user = request.user
    current_author = Author.objects.get(user=current_user)
    create_admin_post_form = CreateAdminPostForm(request.POST, request.FILES)
    if request.method == 'POST':
        if create_admin_post_form.is_valid():
            form = create_admin_post_form.save(commit=False)
            form.active = True
            form.email_active = True
            form.author = current_author
            form.save()
            return redirect('home')
    else:
        create_admin_post_form = CreateAdminPostForm()
    context = {
        'create_admin_post_form': create_admin_post_form,
    }
    return render(request, 'admin_post.html', context)

И, наконец, вот как я это проверил в своих тестах

class TestAdminPost(TestCase):
    def test_admin_post_view(self):
        response = self.client.get(reverse('admin_post'))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'admin_post.html')

    def test_admin_post_empty(self):
        response = self.client.post(reverse('register'), {})
        self.assertFormError(response, 'create_admin_post_form', 'content', 'This field is required.')
        self.assertFormError(response, 'create_admin_post_form', 'title', 'This field is required.')
        self.assertFormError(response, 'create_admin_post_form', 'slug', 'This field is required.')
        self.assertFormError(response, 'create_admin_post_form', 'keyword', 'This field is required.')
        self.assertFormError(response, 'create_admin_post_form', 'category', 'This field is required.')
        self.assertFormError(response, 'create_admin_post_form', 'description', 'This field is required.')
        self.assertFormError(response, 'create_admin_post_form', 'featured_image', 'This field is required.')

    def test_admin_post_valid(self):
        content = 'this is a test content for the post'
        title = ' also this is a test title for the great post '
        slug = 'test-slug'
        keyword = 'test keyword'
        category = Category.objects.create(name='testing category', slug='testing-category')
        description = 'this is the demo description for the test post'
        image = SimpleUploadedFile(name='test_image.jpg', content=open('author.png', 'rb').read(),
                                   content_type='image/png')
        response = self.client.post(reverse('register'),
                                    {'content': content, 'title': title, 'slug': slug, 'keyword': keyword,
                                     'category': category, 'description': description, 'image': image})
        self.assertEqual(response.status_code, 302)

В тестах я использовал get запрос для проверки шаблона и ответа, затем я использовал 2 post запрос один с пустыми данными, а другой с действительными данными.

Я получаю эту ошибку при попытке проверить:

я получил ошибку в строке self.assertFormError(response, 'create_admin_post_form', 'content', 'This field is required.') , где я использовал свой CKEditor AssertionError: The form 'create_admin_post_form' was not used to render the response

это было от test_admin_post_empty части

также получил эту ошибку

AssertionError: 200 != 302 из test_admin_post_valid ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...