rmtree(self.image_path, ignore_errors=True)
, не помогло.print(self.image_path)
выводит такой вот странный путь:C:\Users\Nurzhan\PycharmProjects\CA\tests/tmp\tmpzj8idqwh
@override_settings(MEDIA_URL=self.image_path)
вызвало ошибку:ERROR: article.tests (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: article.tests
Traceback (most recent call last):
File "/opt/python/27/lib/python2.7/unittest/loader.py", line 254, in _find_tests
module = self._get_module_from_name(name)
File "/opt/python/27/lib/python2.7/unittest/loader.py", line 232, in _get_module_from_name
__import__(name)
File "/home/nurzhan/CA/article/tests.py", line 18, in <module>
class ArticleTestCase(TestCase):
File "/home/nurzhan/CA/article/tests.py", line 126, in ArticleTestCase
@override_settings(MEDIA_URL=self.image_path)
NameError: name 'self' is not defined
@override_settings(MEDIA_URL=os.path.join(BASE_DIR, 'tests/tmp/'))
def setUp(self):
self.image_path = tempfile.mkdtemp(dir=os.path.join(BASE_DIR, 'tests/tmp/'))
def tearDown(self):
shutil.rmtree(self.image_path)
@override_settings(MEDIA_URL=os.path.join(BASE_DIR, 'tests/tmp/'))
def test_slide_sorting(self):
[***]
import shutil
import tempfile
def setUp(self):
self.image_path = tempfile.mkdtemp(
prefix="image",
suffix=".jpg",
dir=os.path.join(BASE_DIR, 'tests/tmp')
)
def tearDown(self):
shutil.rmtree(self.image_path)
Traceback (most recent call last):
File "/home/nurzhan/CA/article/tests.py", line 23, in setUp
dir=os.path.join(BASE_DIR, 'tests/tmp')
File "/opt/python/27/lib/python2.7/tempfile.py", line 339, in mkdtemp
_os.mkdir(file, 0700)
OSError: [Errno 2] No such file or directory: '/home/nurzhan/CA/tests/tmp/imageIhLO3c.jpg'
import tempfile
. Может ли быть это из-за версии языка Питон? Я тестирую на версии 2.7. Возможно стоит использовать NamedTemporaryFile?AttributeError: 'module' object has no attribute 'TemporaryDirectory'
def tearDown(self):
rmtree(settings.MEDIA_ROOT, ignore_errors=True)
print str(first_slide.idx)
возвращает 0, думаю не обновилось либо не прошел refresh_from_db. Должно быть 2 после обновления. Как вы думаете как следует правильно создавать записи с изображениями в юнит тестах? Можно ли как-то загрузить из сервера из папки static? class Article(models.Model):
image = models.ImageField(
verbose_name='Изображение',
upload_to='article/images/%Y/%m/%d/',
blank=False,
)
def save(self, *args, **kwargs):
try:
article = Article.objects.get(id=self.id)
if article.image != self.image:
article.image.delete(save=False)
except BaseException:
pass
super(Article, self).save(*args, **kwargs)
first_article.refresh_from_db()
) перестала работать. Что можете сказать по этому поводу? Ошибку приложил внизу. Cтранно как-то все это вы так не думаете?from django.core.files.uploadedfile import SimpleUploadedFile
***
# Создаем изображение
image = Image.new('RGB', (100, 100))
file = tempfile.NamedTemporaryFile(suffix='.jpg')
image.save(file)
first_article = Article.objects.create(
pk=150,
idx=0,
head='First',
image=SimpleUploadedFile(
name='test.jpg',
content=open(file.name, 'rb').read(),
content_type='image/jpeg'
)
)
second_article = Article.objects.create(
pk=160,
idx=1,
head='Second',
image=SimpleUploadedFile(
name='test.jpg',
content=open(file.name, 'rb').read(),
content_type='image/jpeg'
)
)
third_article = Article.objects.create(
pk=170,
idx=2,
head='Third',
image=SimpleUploadedFile(
name='test.jpg',
content=open(file.name, 'rb').read(),
content_type='image/jpeg'
)
)
data = {150: 2, 160: 0, 170: 1}
response = self.client.post(
reverse("article:article_sorting"),
data=json.dumps(data),
content_type='application/json; charset= utf-8',
follow=True
)
self.assertEqual(response.content, '{"saved": "OK"}')
self.assertEqual(response.status_code, 200)
first_article.refresh_from_db()
print str(first_slide.idx) <-- Возвращает 0, не обновилось. Должно быть 2 после обновления
self.assertEquals(first_article.idx, 2)
second_article.refresh_from_db()
self.assertEquals(second_article.idx, 0)
third_article.refresh_from_db()
self.assertEquals(third_article.idx, 1)
Traceback (most recent call last):
File "/home/nurzhan/CA/article/tests.py", line 176, in test_article_sorting
self.assertEquals(first_article.idx, 2)
AssertionError: 0 != 2
Traceback (most recent call last):
File "/home/nurzhan/CA/static_pages/tests.py", line 120, in test_article_sorting
self.assertEquals(first_article.idx, 2)
AssertionError: 0 != 2
print response.content
возращает {"saved": "OK"}
и статус 200. Вроде правильно все, но idx не поменялся. def test_article_sorting(self):
first_article = Article.objects.create(pk=150, idx=0, head='First')
second_article = Article.objects.create(pk=160, idx=1, head='Second')
third_article = Article.objects.create(pk=170, idx=2, head='Third')
data = {150: 2, 160: 0, 170: 1}
response = self.client.post(
reverse("static_page:static_page_sorting"),
data=json.dumps(data),
content_type='application/json',
follow=True
)
self.assertEqual(response.content, '{"saved": "OK"}')
self.assertEqual(response.status_code, 200)
self.assertEquals(first_article.idx, 2) <-- ОШИБКА
self.assertEquals(second_article.idx, 0)
self.assertEquals(third_article.idx, 1)
<form method="post" action="{% url 'article:article_edit' article.id %}" class="articleEditForm" enctype="multipart/form-data">
{% csrf_token %}
{# ПОЛЯ #}
<button type="submit" class="btn btn-success">{% trans 'Обновить' %}</button>
</form>
LANGUAGE_CODE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
('de', _('German')),
)
MODELTRANSLATION_LANGUAGES = ('en', 'de')