使用 django-webpack-loader 时运行单元测试而不生成资产

Feu*_*mel 5 django webpack

我正在使用一些前端 JavaScript 代码处理 Django 项目。我正在使用django-webpack-loader将 JavaScript 打包和缩小从djanog-pipeline迁移到webpack。

django-webpack-loader通过运行独立于任何Django进程的webpack来生成打包的包。然后 django-webpack-loader 将读取由webpack-bundle-tracker编写的 JSON 文件,并使用该信息将正确的路径插入到 HTML 模板中。

这完美无缺,但有一个问题:我们的一些单元测试将使用集成的Django 测试客户端访问 Django 应用程序,它呈现完整的 HTML 响应,以便测试可以检查生成的结果。可以在没有完成任何与 webpack 相关的设置的情况下运行测试。所以打包的包和 JSON 文件可能不存在。这些不是测试前端代码所必需的,只检查动态生成的 HTML。仅仅因为有人忘记运行 webpack 导致测试失败会导致沮丧。

理想情况下,我会让 django-webpack-loader<script>在运行测试时只在插入的标签中使用虚拟 URL ,从而消除对 webpack 生成的文件的依赖。我有什么选择来解决这种依赖性?

Rma*_*att 5

如果您想对pytest运行的所有测试进行更高级别的测试,您可以添加到您的conftest.py:

@fixture(autouse=True)
def no_webpack_loaded(monkeypatch):
    def mockreturn(loader, bundle_name):
        return []
    monkeypatch.setattr(WebpackLoader, "get_bundle", mockreturn)
Run Code Online (Sandbox Code Playgroud)


Sus*_*eng 4

您可以完全修补加载程序以绕过 django-webpack-loader 可能执行的任何操作:

from mock import patch

...

@patch('webpack_loader.loader.WebpackLoader.get_bundle')
def test(self, mock_wpl, client):
    mock_wpl.return_value = []
    response = client.get("/")
    assert response.status_code == 200
Run Code Online (Sandbox Code Playgroud)