利用 Sinon 测试 AJAX 请求

AJAX BDD DOM HTTP Mocha Mock Promise XHR jQuery 异步 测试

在 Web 前端测试中,常常会需要测试 AJAX 行为。 为了简化测试的环境要求需要提供虚拟的测试环境。 Sinonjs 在这方面提供了两类 API:

  • Fake XMLHttpRequest:覆盖 DOM API 中的 XHR。使得我们可以捕获所有用户构建的 XHR 对象,包括直接构造的 XMLHttpRequest,也包括通过 jQuery 等工具构造的。因此可以测试 XHR 构造是否正确。
  • Fake Server:Mock 服务器行为。如果我们只希望 Mock 服务器的 Response,可以使用 Fake Server。

是时候熟悉一下 Promise 异步编程范式了!

mongoose JavaScript MongoDB Node.js Promise 回调函数

Promise 是 JavaScript 中的一种异步编程范式, 一个 Promise 对象表示一个即将完成但还未完成的操作。 鉴于 JavaScript 中异步和 回调 的编程风格, Promise 模式可以有效地避免『Callback Hell』。

Promise 最初由 Q, jQuery 1.5, RSVP.js, bluebird 等实现, 现有 Promises/A+ 社区标准可以参考:https://promisesaplus.com/,在 纳入 ES6 后浏览器和 Node.js 都相继给出了实现。

初始化

传入一个回调函数即可初始化一个 Promise 对象 padmin

var padmin = new Promise(function(resolve, reject){
    user.find({role: 'admin'}, function(err, admins){
        if(err) reject(err);
        else resolve(admins);
    });
});

在 Vim 中优雅地查找和替换

Vim 字符串 快捷键 正则表达式

总有人问我 Vim 中能不能查找,当然能!而且是超级强的查找! 这篇文章来详细介绍 Vim 中查找相关的设置和使用方法。 包括查找与替换、查找光标所在词、高亮前景/背景色、切换高亮状态、大小写敏感查找等。

Vim 中为 Markdown 配置回车展开

Markdown Vim Jekyll

靠 Vim 写 Jekyll 博客已经很久了,编写代码块(Code Fence)时键入前后的```, 以及手动编写文章头信息(Front Matter)一直是个麻烦的事情。 今天就通过Vim键盘映射来对这两种语法提供回车展开支持。最终效果如下:

使用 systemd 管理 Node.js 应用

MongoDB Node.js Redis systemd

systemd 是 Linux 下的一款系统和服务管理器, 该软件的初衷是提供精确的服务间依赖,以此支持并行启动来提高性能。 越来越多的 Linux 发行版都由 sysvinit 迁移到了 systemd(包括 Debian!)。 在这些 Linux 系统中,用原生的 systemd 来托管 Node.js 进程足够满足一般开发者的要求。 借由 systemd 可以很方便地处理依赖关系和监测日志。

systemctl

systemctl 是查询和控制 systemd 的主要命令,下面以 mongod 为例介绍常用参数:

MongoDBNode.js 下非常常见的 NoSQL 数据库,在 ArchLinux 下通过 pacman 安装:pacman install mongodb,安装成功后 mongod 即为可用的 systemd 服务。

# 查看服务状态
systemctl status mongod
# 启动服务
systemctl start mongod
# 停止服务
systemctl stop mongod
# 重启服务
systemctl restart mongod
# 设为自启动
systemctl enable mongod
# 取消自启动
systemctl disable mongod

ES6生成器:可迭代协议与迭代器协议

JavaScript 迭代器 生成器 ES6

ES6(ECMAScript 2015)中提出了生成器的概念,进一步完整了JavaScript语言。 本文介绍了可迭代协议与迭代器协议的概念区别,以及生成器的声明与使用方法。

生成器函数

生成器函数是用来返回生成器的函数,生成器是一种有状态的迭代器, 可实现较复杂的迭代行为,比如生成ID。 生成器函数使用function*语法来定义:

function* idMaker(){
    var index = 0;
    while(index<3){
        yield index++;
    }
}

生成器函数也可以通过GeneratorFunction(类似Function)、function* expression来定义(可以使用匿名函数)。

上一页 下一页