• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 24164262159

08 Apr 2026 11:36PM UTC coverage: 85.889% (-7.0%) from 92.91%
24164262159

Pull #23238

github

web-flow
Merge 88d90acad into 5a129def6
Pull Request #23238: TypeScript: `prettier fmt` crashes with resolve in subdirectory

3 of 3 new or added lines in 1 file covered. (100.0%)

5412 existing lines in 246 files now uncovered.

72530 of 84446 relevant lines covered (85.89%)

3.13 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

59.38
/src/python/pants/backend/javascript/install_node_package_test.py
1
# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
1✔
5

6
import json
1✔
7
from textwrap import dedent
1✔
8

9
import pytest
1✔
10

11
from pants.backend.javascript import install_node_package, package_json
1✔
12
from pants.backend.javascript.install_node_package import (
1✔
13
    InstalledNodePackage,
14
    InstalledNodePackageRequest,
15
)
16
from pants.backend.javascript.package_json import PackageJsonTarget
1✔
17
from pants.backend.javascript.target_types import JSSourcesGeneratorTarget
1✔
18
from pants.build_graph.address import Address
1✔
19
from pants.engine.fs import DigestContents
1✔
20
from pants.engine.rules import QueryRule
1✔
21
from pants.testutil.rule_runner import RuleRunner
1✔
22

23

24
@pytest.fixture
1✔
25
def rule_runner() -> RuleRunner:
1✔
26
    return RuleRunner(
1✔
27
        rules=[
28
            *install_node_package.rules(),
29
            *package_json.rules(),
30
            QueryRule(InstalledNodePackage, (InstalledNodePackageRequest,)),
31
        ],
32
        target_types=[PackageJsonTarget, JSSourcesGeneratorTarget],
33
        objects=dict(package_json.build_file_aliases().objects),
34
    )
35

36

37
def test_install_node_package_with_extra_env_vars(rule_runner: RuleRunner) -> None:
1✔
38
    # Test both subsystem and target-level environment variables
39
    rule_runner.set_options(
1✔
40
        [
41
            "--nodejs-extra-env-vars=['GLOBAL_VAR=global_value', 'TARGET_VAR=will_be_overridden']",
42
            "--nodejs-tools=['env']",
43
        ],
44
        env_inherit={"PATH"},
45
    )
46

47
    rule_runner.write_files(
1✔
48
        {
49
            "src/js/BUILD": dedent(
50
                """
51
                package_json(
52
                    extra_env_vars=[
53
                        "TARGET_VAR=target_value",
54
                    ]
55
                )
56
                """
57
            ),
58
            "src/js/package.json": json.dumps(
59
                {
60
                    "name": "test-package",
61
                    "version": "1.0.0",
62
                    "packageManager": "yarn@1.22.22",
63
                    "scripts": {
64
                        "postinstall": "env > node_modules/env-vars.txt",
65
                    },
66
                }
67
            ),
68
        }
69
    )
70

71
    installed_package = rule_runner.request(
1✔
72
        InstalledNodePackage,
73
        [InstalledNodePackageRequest(Address("src/js"))],
74
    )
UNCOV
75
    digest = rule_runner.request(DigestContents, [installed_package.digest])
×
UNCOV
76
    env_vars_file = next((f for f in digest if f.path == "src/js/node_modules/env-vars.txt"), None)
×
UNCOV
77
    assert env_vars_file is not None
×
78

UNCOV
79
    content = env_vars_file.content.decode("utf-8")
×
UNCOV
80
    actual_env_vars = {}
×
UNCOV
81
    for line in content.split("\n"):
×
UNCOV
82
        if "=" in line:
×
UNCOV
83
            key, value = line.split("=", 1)
×
UNCOV
84
            actual_env_vars[key] = value
×
85

UNCOV
86
    assert "TARGET_VAR" in actual_env_vars
×
UNCOV
87
    assert actual_env_vars["TARGET_VAR"] == "target_value"
×
88

UNCOV
89
    assert "GLOBAL_VAR" in actual_env_vars
×
UNCOV
90
    assert actual_env_vars["GLOBAL_VAR"] == "global_value"
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc