首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁能给我举一些NSpec用来测试控制器(以及MVC site的其他方面)的例子?

谁能给我举一些NSpec用来测试控制器(以及MVC site的其他方面)的例子?
EN

Stack Overflow用户
提问于 2012-05-24 23:59:56
回答 1查看 1.3K关注 0票数 0

我开始使用NSpec了,但是我想要一些关于如何使用它来规范或测试我的控制器的正确方法的建议。基本上,几个例子将会有很长的路要走。有没有什么样例项目?所有的帮助都将不胜感激。

理查德。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-11 22:10:18

为什么?是的!下面的测试套件来自一个参考实现,有4个独特的mvc应用程序都使用NSpec作为它们的测试套件。一定要检查一下here

以下是其中一个测试。本规范验证登录页面和注册页面。为了一个网站。

代码语言:javascript
复制
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<ViewResult>();
      };

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

        context["user exists"] = () =>
        {
          before = () => 
            user = GivenUser("user@example.com", 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("user@example.com", 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<ViewResult>();
      };

      context["user registers"] = () =>
      {
        act = () =>
        {
          result = controller.Register(new
          {
            Email = "user@example.com",
            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("user@example.com");

          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.");
      };
    }
  }
}

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10741104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档