Skip to content

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

@PindaPixel

Description

@PindaPixel
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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions