gpt4 book ai didi

django - 使用 django-pipeline 进行单元测试

转载 作者:行者123 更新时间:2023-12-04 01:57:22 31 4
gpt4 key购买 nike

我在对使用 django-pipeline 的应用程序进行单元测试时遇到问题?每当我在任何 URL 上执行 client.get() 时,它都会产生以下异常:

ValueError: The file 'css/bootstrap.css' could not be found with <pipeline.storage.PipelineCachedStorage object at 0x10d544950>.



它是 bootstrap.css 的事实当然不重要,但由于此异常我无法执行 View 渲染。

欢迎任何指南/提示!

最佳答案

我遇到了类似的问题。但是,设置

STATICFILES_STORAGE='pipeline.storage.NonPackagingPipelineStorage'

运行测试时仅部分解决了我的问题。如果您想运行 LiverServerTestCase 测试而不必在运行测试之前调用“collecstatic”,我还必须完全禁用管道:
PIPELINE_ENABLED=False

从 django 1.4 开始,修改测试设置相当容易——有一个方便的装饰器适用于方法或 TestCase 类:

https://docs.djangoproject.com/en/1.6/topics/testing/tools/#overriding-settings

例如
from django.test.utils import override_settings

@override_settings(STATICFILES_STORAGE='pipeline.storage.NonPackagingPipelineStorage', PIPELINE_ENABLED=False)
class BaseTestCase(LiveServerTestCase):
"""
A base test case for Selenium
"""

def setUp(self):
...

然而,正如@jrothenbuhler 在他的回答中所描述的那样,这产生了不一致的结果。无论如何,如果您正在运行集成测试,这并不理想 - 您应该尽可能地模拟生产以捕获任何潜在问题。看来 django 1.7 以新的测试用例“StaticLiveServerTestCase”的形式解决了这个问题。从文档:
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerCase

This unittest TestCase subclass extends django.test.LiveServerTestCase.

Just like its parent, you can use it to write tests that involve running the code under test and consuming it with testing tools through HTTP (e.g. Selenium, PhantomJS, etc.), because of which it’s needed that the static assets are also published.



我没有测试过这个,但听起来很有希望。现在,我正在使用自定义测试运行程序在他的解决方案中执行 @jrothenbuhler 的操作,这不需要您运行 collectstatic。如果你真的,真的想让它运行 collectstatic 你可以做这样的事情:
from django.conf import settings
from django.test.simple import DjangoTestSuiteRunner
from django.core.management import call_command

class CustomTestRunner(DjangoTestSuiteRunner):
"""
Custom test runner to get around pipeline and static file issues
"""

def setup_test_environment(self):
super(CustomTestRunner, self).setup_test_environment()
settings.STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineStorage'
call_command('collectstatic', interactive=False)

在settings.py中
TEST_RUNNER = 'path.to.CustomTestRunner'

关于django - 使用 django-pipeline 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816941/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com