microsoft/nodejstools

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

PindaPixel opened this issue · 0 comments

Expected Behavior

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

Actual Behavior
  • NTVS Version: 1.5.10610.1
  • Visual Studio Version: 2022 17.7.6
  • Node.js Version: 20.8.1
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>
  1. Reload the project
  2. Notice the Test Explorer is unable to find any tests