我正在使用一些前端JavaScript代码处理Django项目。我正在使用djanog-pipeline将JavaScript打包和缩小从webpack迁移到django-webpack-loader。
django-webpack-loader 通过运行 webpack 与任何 Django 进程分开来生成压缩包。然后,django-webpack-loader将读取webpack-bundle-tracker编写的JSON文件,并使用该信息将正确的路径插入HTML模板。
这完美无缺,但有一个问题:我们的一些单元测试将使用集成的Django test client访问Django应用程序,它会呈现完整的HTML响应,以便测试可以检查生成的结果。可以在没有完成任何与webpack相关的设置的情况下运行测试。因此打包的bundle和JSON文件可能不存在。这些对于测试前端代码不是必需的,仅检查动态生成的HTML。测试失败只是因为有人忘记运行webpack会导致沮丧。
理想情况下,我会让django-webpack-loader在运行测试时在插入的<script>
标记中使用虚拟URL,从而消除对webpack生成的文件的依赖性。我有什么选择来解决这种依赖?
答案 0 :(得分:2)
您可以完全修补加载程序以绕过django-webpack-loader可能执行的操作:
from mock import patch
...
@patch('webpack_loader.loader.WebpackLoader.get_bundle')
def test(self, mock_wpl):
pass
答案 1 :(得分:1)
如果您想对 pytest 进行的所有测试都进行更高级别的操作,则可以将其添加到conftest.py
:
@fixture(autouse=True)
def no_webpack_loaded(monkeypatch):
def mockreturn(loader, bundle_name):
return []
monkeypatch.setattr(WebpackLoader, "get_bundle", mockreturn)