5

Je suis en train de mettre en œuvre le test d'intégration pour mon application suivant le tutoriel de: https://docs.microsoft.com/en-us/aspnet/core/testing/integration-testingaspnet test d'intégration de base retour 404

public class CreditCardApplicationShould 
{ 
    [Fact] 
    public async Task RenderApplicationForm() 
    { 
     var builder = new WebHostBuilder() 
      .UseContentRoot(@"C:\Users\usuario\source\repos\CreditCardApp\CreditCardApp") 
      .UseEnvironment("Development") 
      .UseStartup<CreditCardApp.Startup>() 
      .UseApplicationInsights(); 

     var server = new TestServer(builder); 

     var client = server.CreateClient(); 

     var response = await client.GetAsync("/Apply/Index"); 

     response.EnsureSuccessStatusCode(); 

     var responseString = await response.Content.ReadAsStringAsync(); 

     Assert.Contains("New Credit Card Application", responseString); 
    } 
} 

Cependant, quand je suis en train de lancer le test d'intégration, il me donne l'erreur suivante:

"Message: System.InvalidOperationException : The view 'Index' was not found. The following locations were searched: /Views/Apply/Index.cshtml /Views/Shared/Index.cshtml"

Il semble être un problème courant lors de la séparation du test d'intégration de l'application MVC.

est ici les startup.cs trop

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      .AddEnvironmentVariables(); 

     Configuration = builder.Build(); 
     CurrentEnvironment = env; 
    } 

    public IConfiguration Configuration { get; } 

    private IHostingEnvironment CurrentEnvironment { get; } 

    // This method gets called by the runtime. Use this method to add services to the container. 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc().AddApplicationPart(typeof(ApplyController).GetTypeInfo().Assembly); 
    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
      app.UseBrowserLink(); 
     } 
     else 
     { 
      app.UseExceptionHandler("/Home/Error"); 
     } 

     app.UseStaticFiles(); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 
} 

J'ai trouvé des contournements de travail, qui dit d'inclure le AddApplicationPart dans le Startup.cs, mais il ne fonctionne toujours pas.

Je ne sais pas si cela ne fonctionne pas parce que j'utilise .NET Core 2.0. J'apprécie tous les conseils.

+0

Je pense que vous devez vérifier le chemin racine de contenu – Nkosi

+0

@Nkosi Il ne fonctionne pas trop. Comme vous pouvez le voir, je suis en train de coder le chemin pour ContentRoot et même avec ça, pas de succès ... –

+1

Regardez comment le chemin est défini ici https://stackoverflow.com/a/37844252/5233410 – Nkosi

Répondre

0

J'ai eu le même problème que vous avez et je l'ai résolu en ajoutant appsettings.json chemin de fichier à WebHostBuilder(). J'ai mis en place comme suit.

var builder = new WebHostBuilder() 
      .UseContentRoot(@"C:\Users\usuario\source\repos\CreditCardApp\CreditCardApp") 
      .UseEnvironment("Development") 
      .UseStartup<CreditCardApp.Startup>() 
      .UseApplicationInsights() 
      .UseConfiguration(new ConfigurationBuilder() 
        .SetBasePath(YourProjectPath) // @"C:\Users\usuario\source\repos\CreditCardApp\CreditCardApp" 
        .AddJsonFile("appsettings.json") 
        .Build() 
      );