使用django-webpack-loader

时间:2017-04-27 14:30:46

标签: django webpack

我正在使用一些前端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生成的文件的依赖性。我有什么选择来解决这种依赖?

2 个答案:

答案 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)