Poate cineva să-mi arăt câteva exemple de NSpec care sunt folosite pentru a testa controlorii (și alte aspecte ale site-ului MVC)?

Începeam să lucrez cu NSpec, dar mi-ar plăcea câteva indicii pe calea cea bună să o folosesc pentru a-mi specifica sau a testa controlorii. Practic, câteva exemple ar merge foarte mult. Exista proiecte de exemplu acolo? Toate ajutoarele ar fi apreciate.

Richard.

0
Bună, da, intenționez să folosesc speclurile pentru testele mele de acceptare/integrare, dar am fost de înțeles că nspec ar fi mai bine pentru testarea componentelor - aceasta pare a fi înțelepciunea comună despre care am citit în cartea RSpec, etc.
adăugat autor richardwhatever, sursa
Te-ai uitat la SpecFlow? specflow.org
adăugat autor danludwig, sursa

1 răspunsuri

De ce da! Testarea suite care urmează este dintr-o implementare de referință, există 4 aplicații unice de mvc care toate utilizează NSpec ca suita de test. În mod explicit, verificați-le aici .

Iată unul dintre teste. Această specificație verifică o pagină de conectare și o pagină de înregistrare. Pentru un site web.

using System;
using System.Linq;
using NSpec;
using BorrowedGames.Controllers;
using System.Web.Mvc;
using System.Collections.Generic;

namespace BorrowedGames.Tests.Controllers
{
  class describe_AccountController : _borrowed_games
  {
    AccountController controller;

    dynamic user;

    bool authenticated;

    void before_each()
    {
      controller = new AccountController();

      controller.Authenticate = s =>
      {
        authenticated = true;

        SetCurrentUser(controller, Users.ForEmail(s).Id);
      };
    }

    void logging_in()
    {
      context["requesting login page"] =() =>
      {
        act =() => result = controller.LogOn();

        it["returns login page"] =() => 
          (result as object).should_cast_to();
      };

      context["authenticating"] =() =>
      {
        act =() => result = controller.LogOn(new
        {
          Email = "[email protected]",
          Password = "password",
          RedirectUrl = null as string
        });

        context["user exists"] =() =>
        {
          before =() => 
            user = GivenUser("[email protected]", null, "password");

          it["authenicates user"] =() =>
            authenticated.should_be_true();

          it["redirects to home page"] =() => 
            (result.Url as string).should_be("/");

          it["sets user in session"] =() =>
            (controller.UserId()).should_be((decimal)user);
        };

        context["user exists, password doesn't match"] =() =>
        {
          before =() => 
            GivenUser("[email protected]", null, "other");

          it["returns invalid login"] =() => 
            (result.ViewBag.Flash as string).should_be("Login failed.");
        };

        context["user does not exist"] =() =>
        {
          it["returns invalid login"] =() => 
            (result.ViewBag.Flash as string).should_be("Login failed.");
        };
      };
    }

    void registering_for_site()
    {
      context["requesting registration page"] =() =>
      {
        act =() => result = controller.Register();

        it["returns view"] =() => 
          (result as object).should_cast_to();
      };

      context["user registers"] =() =>
      {
        act =() =>
        {
          result = controller.Register(new
          {
            Email = "[email protected]",
            Password = "password",
            PasswordConfirmation = "password"
          });

          user = Users.All().First().Id;
        };

        it["logs in user"] =() => 
          (result.Url as string).should_be("/");

        it["authenticates user"] =() => 
          authenticated.should_be_true();

        it["sets user in session"] =() =>
          ((decimal)controller.UserId()).should_be((decimal)user);

        context["user name is taken"] =() =>
        {
          before =() => GivenUser("[email protected]");

          it["return error stating that user name is taken"] =() =>
            (result.ViewBag.Flash as string).should_be("Email is unavailable.");
        };
      };

      context["registration is invalid"] =() =>
      {
        act =() => result = 
          controller.Register(new 
          { 
            Email = default(string), 
            Password = default(string) 
          });

        it["returns error stating that email is required."] =() =>
          (result.ViewBag.Flash as string).should_be("Email is required.");
      };
    }
  }
}
0
adăugat