You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cursor(VS Code)中无法跳转pytest Fixture定义的问题求助

Pytest Fixture 无法通过Command-click跳转至定义的解决方法(Django Ninja + Cursor环境)

我在Cursor中开发Django Ninja项目时遇到一个问题:pytest测试用例里作为参数注入的fixture(比如mock_auth、client、client_headers这些)无法通过Command-click跳转至它们的定义,但普通变量、函数、类的跳转功能完全正常。我已经尝试过VS Code的「配置测试」→「pytests」→「根目录」流程,但问题依旧。

相关代码与配置

测试代码示例

@pytest.mark.django_db
def test_deleting_an_already_inactive_channel_raises_error(mock_auth, client, client_headers, user, channel):
    channel.active = False
    channel.save()

    url = reverse("roon:channel", kwargs={"channel_id": channel.id})
    response = client.delete(url, content_type="application/json", headers=client_headers(user))

    assert response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY

VS Code settings.json配置

{
    "python.testing.pytestEnabled": true,
    "python.testing.pytestArgs": ["--import-mode=importlib", "--no-cov"]
}

pyproject.toml配置

[tool.pytest.ini_options]
minversion = "7.0"
#Pytest to have verbose outputs
#Pytest-xdist automatically determines number of workers based on cpu#Output a summary of all, except passes
#Pytest report stats - Failures + Skipped
#Pytest-cov to report coverage for library
#Pytest-cov to use pyproject.toml file for additional coverage config
#Pytest-cov outputs coverage to stdout
#Pytest-cov fails if the coverage falls under the value
#Pytest-cov generates an HTML report in /test-results
#Pytest-cov generates an XML report in /test-results
addopts = '''
    -vv
    -n auto
    -ra
    -m "not (deprecated or integration)"
    --cov=api
    --cov-config pyproject.toml
    --cov-report term-missing
    --cov-fail-under=60
    --cov-report html
    --cov-report xml
    --durations=10
    -s
'''
markers = [
    "integration: marks tests for integration environment (deselect with '-m \"not integration\"')",
    "slow: marks tests the are VERY slow (deselect with '-m \"not slow\"')",
    "deprecated: marks tests the are deprecated or on an invalid version (deselect with '-m \"not deprecated\"')",
]
testpaths = [
    "api",
    "carespace"
]
python_files = ["test_*.py", "*_test.py", "tests.py"]

[tool.coverage.run]
parallel = true
branch = true
source = [
    "api/*",
]
omit = [
    "*/test/*",
    "*/tests/*",
    "*/migrations/*",
    "*/management/*",
    # Skip Admin pages
    "*/admin*",
    # Deprecated Apps
]

[tool.coverage.report]
show_missing = true
skip_covered = true
ignore_errors = true
sort = "Cover"
exclude_lines = [
    "pragma: no cover",
    # Don't complain about missing debug-only code:
    "def __unicode__",
    "def __repr__",
    "if self.debug",
    # Don't complain if tests don't hit defensive assertion code:
    "raise AssertionError",
    "raise NotImplementedError",
    # Don't complain if non-runnable code isn't run:
    "if 0:",
    "if __name__ == .__main__.:",
    "from",
]

[tool.coverage.html]
directory = "test-results/line_coverage_html"

[tool.coverage.xml]
output = "test-results/coverage.xml"

解决方法

1. 确保fixture被正确识别

  • 检查fixture定义位置:确认mock_auth、client等fixture定义在conftest.py文件中(项目根目录或测试目录下的conftest.py),pytest会自动加载这些文件,但语言服务依赖明确的路径解析。
  • 添加类型注解:给fixture加上类型注解,帮助Cursor语言服务精准定位定义,示例:
    import pytest
    from django.test import Client
    
    @pytest.fixture
    def client() -> Client:
        return Client()
    

2. 调整Python语言服务配置

  • 在settings.json中添加项目路径到Python解析路径:
    {
        "python.analysis.extraPaths": ["./api", "./carespace"],
        "python.testing.pytestEnabled": true,
        "python.testing.pytestArgs": ["--import-mode=importlib", "--no-cov"]
    }
    
  • 移除--import-mode=importlib:该参数可能干扰语言服务的模块解析,尝试从pytestArgs中删除后重启服务。

3. 刷新语言服务缓存

  • 按下Cmd+Shift+P(Mac)打开命令面板,选择「Python: Restart Language Server」强制重启服务,清除缓存后重新解析项目。
  • 关闭并重新打开Cursor,触发项目索引的重新构建。

4. 检查fixture的命名与作用域

  • 避免fixture命名冲突:如果不同目录的conftest.py中存在同名fixture,语言服务无法确定跳转目标,建议统一命名或调整作用域。
  • 确认fixture装饰器正确:确保所有fixture都使用@pytest.fixture装饰,无语法错误导致识别失败。

内容的提问来源于stack exchange,提问作者Darshan Kalola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:55:06