microsoft / nodejstools

Node.js Tools for Visual Studio
http://aka.ms/explorentvs
Apache License 2.0
1.79k stars 359 forks source link

Unable to detect unit tests in project with multiple package.json files #2486

Open PindaPixel opened 9 months ago

PindaPixel commented 9 months ago
Expected Behavior

Unit tests are found when multiple package.json files exist in the project.

Actual Behavior
Steps to Reproduce
  1. Create a project using the ASP.NET Core with Angular template
  2. Add a package.json at the root level of the project, now the folder structure should look as follows (excerpt):
    MyProject/
    ├─ ClientApp/
    │  ├─ package.json
    ├─ Controllers/
    ├─ Pages/
    ├─ wwwroot/
    ├─ package.json
    ├─ Program.cs
  3. Edit the project configuration for unit testing with Karma/Jasmine:

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
          <TargetFramework>net7.0</TargetFramework>
          <Nullable>enable</Nullable>
          <IsPackable>false</IsPackable>
          <SpaRoot>ClientApp\</SpaRoot>
          <SpaProxyServerUrl>https://localhost:44445</SpaProxyServerUrl>
          <SpaProxyLaunchCommand>npm start</SpaProxyLaunchCommand>
          <ImplicitUsings>enable</ImplicitUsings>
    
          <!-- Unit tests -->
          <JavaScriptTestRoot>ClientApp\</JavaScriptTestRoot>
          <JavaScriptTestFramework>Jasmine</JavaScriptTestFramework>
          <GenerateProgramFile>false</GenerateProgramFile>
      </PropertyGroup>
    
      <ItemGroup>
          <PackageReference Include="Microsoft.AspNetCore.SpaProxy" Version="7.0.13" />
          <PackageReference Include="Microsoft.JavaScript.UnitTest" Version="1.5.10610.1">
              <PrivateAssets>all</PrivateAssets>
              <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
          </PackageReference>
      </ItemGroup>
    
      <ItemGroup>
          <!-- Don't publish the SPA source files, but do show them in the project files list -->
          <Content Remove="$(SpaRoot)**" />
          <None Remove="$(SpaRoot)**" />
          <None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
      </ItemGroup>
    
      <Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
          <!-- Ensure Node.js is installed -->
          <Exec Command="node --version" ContinueOnError="true">
              <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
          </Exec>
          <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
          <Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
          <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
      </Target>
    
      <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
          <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
          <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
          <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --configuration production" />
    
          <!-- Include the newly-built files in the publish output -->
          <ItemGroup>
              <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
              <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
                  <RelativePath>wwwroot\%(RecursiveDir)%(FileName)%(Extension)</RelativePath>
                  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
                  <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
              </ResolvedFileToPublish>
          </ItemGroup>
      </Target>
    </Project>
  4. Reload the project
  5. Notice the Test Explorer is unable to find any tests