Skip to content

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

Description

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:
<ProjectSdk="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>
<PackageReferenceInclude="Microsoft.AspNetCore.SpaProxy"Version="7.0.13" />
<PackageReferenceInclude="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 -->
<ContentRemove="$(SpaRoot)**" />
<NoneRemove="$(SpaRoot)**" />
<NoneInclude="$(SpaRoot)**"Exclude="$(SpaRoot)node_modules\**" />
</ItemGroup>
<TargetName="DebugEnsureNodeEnv"BeforeTargets="Build"Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
<!-- Ensure Node.js is installed -->
<ExecCommand="node --version"ContinueOnError="true">
<OutputTaskParameter="ExitCode"PropertyName="ErrorCode" />
</Exec>
<ErrorCondition="'$(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." />
<MessageImportance="high"Text="Restoring dependencies using 'npm'. This may take several minutes..." />
<ExecWorkingDirectory="$(SpaRoot)"Command="npm install" />
</Target>
<TargetName="PublishRunWebpack"AfterTargets="ComputeFilesToPublish">
<!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
<ExecWorkingDirectory="$(SpaRoot)"Command="npm install" />
<ExecWorkingDirectory="$(SpaRoot)"Command="npm run build -- --configuration production" />
<!-- Include the newly-built files in the publish output -->
<ItemGroup>
<DistFilesInclude="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
<ResolvedFileToPublishInclude="@(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