TL; DR - 测试使用JWT进行身份验证的Node API(Express)中的资源的方法是什么,只有授予用户名/密码登录权限的令牌?
我对测试很陌生,想得到一些建议.最终目标是拥有一个经过全面测试的API,然后开始学习如何将其连接到持续集成解决方案.
使用的技术
API信息
API具有各种资源 - 其具体细节对于此查询并不重要,但为了简单起见,我们只是假装它是无处不在的Todo应用程序.
保存在数据库中的每个单独资源都与一个用户相关联.
API使用JWT在各种资源端点上进行身份验证.令牌本身包含唯一的用户ID,该用户ID是针对Mongo数据库中的资源存储的.要获取令牌本身,需要用户首先注册(返回令牌),然后登录以获取新令牌.
假装代码.
我将简化下面的代码,而不是使用任何环境配置等...
app.js
var express = require('express');
var app = express();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var passport = require('passport');
mongoose.connect('mongodb://localhost/somedatabasename');
app.set('port', process.env.PORT || 3000);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(passport.initialize());
// ... Passport JWT Strategy goes here - omitted for simplicity ...
var userRouter = require('./api/users/routes');
app.use('/users', userRouter);
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Node应用程序转换为使用Docker但遇到一些我无法回答的问题/问题.
但为了简单起见,我已经包含了一些非常基本的示例文件来保持目标问题.实际上,下面的示例仅链接到Mongo容器,但不在代码中使用它以使其更简单.
首先,在本地(OS X)开发和生产版本的Node + Express + Mongo应用程序上成功使用Docker需要什么Dockerfile和docker-compose.yml设置?
FROM node:6.3.0
# Create new user to avoid using root - is this correct practise?
RUN useradd --user-group --create-home --shell /bin/false app
COPY package.json /home/app/code/
RUN chown -R app:app /home/app/*
USER app
WORKDIR /home/app/code
# Should this even be set here or use docker-compose instead?
# And should there be:
# - docker-compose.yml setting it to production by default
# - docker-compose.dev.yml setting it to production?
# …Run Code Online (Sandbox Code Playgroud) 我正在使用 Node 创建一个 API,但我正在努力理解如何正确地对 API 进行单元测试。API 本身使用 Express 和 Mongo(使用 Mongoose)。
到目前为止,我已经能够为 API 端点本身的端到端测试创建集成测试。我已经使用 supertest、mocha 和 chai 进行集成测试,同时使用 dotenv 在运行时使用测试数据库。npm 测试脚本在集成测试运行之前设置要测试的环境。它工作得很好。
但我还想为各种组件(例如控制器功能)创建单元测试。
我很想使用 Sinon 进行单元测试,但我很难知道接下来要采取什么步骤。
我将详细介绍重写为每个人最喜欢的 Todos 的 API 的通用版本。
该应用程序具有以下目录结构:
api
|- todo
| |- controller.js
| |- model.js
| |- routes.js
| |- serializer.js
|- test
| |- integration
| | |- todos.js
| |- unit
| | |- todos.js
|- index.js
|- package.json
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "todos",
"version": "1.0.0",
"description": "",
"main": "index.js",
"directories": {
"doc": "docs" …Run Code Online (Sandbox Code Playgroud)