如果我像这样设置express.js:
app.set("x-powered-by", false);
Run Code Online (Sandbox Code Playgroud)
如何测试这个?
.expect('X-Powered-By', '', done)
Run Code Online (Sandbox Code Playgroud)
会抛出错误:Error: expected "X-Powered-By" header field
.expect('X-Powered-By', null, done)
Run Code Online (Sandbox Code Playgroud)
也不行。
谢谢!
如何使用正在发送的令牌测试文件上传?我返回“0”而不是确认上传。
这是一个失败的测试:
var chai = require('chai');
var expect = chai.expect;
var config = require("../config"); // contains call to supertest and token info
describe('Upload Endpoint', function (){
it('Attach photos - should return 200 response & accepted text', function (done){
this.timeout(15000);
setTimeout(done, 15000);
config.api.post('/customer/upload')
.set('Accept', 'application.json')
.send({"token": config.token})
.field('vehicle_vin', "randomVIN")
.attach('file', '/Users/moi/Desktop/unit_test_extravaganza/hardwork.jpg')
.end(function(err, res) {
expect(res.body.ok).to.equal(true);
expect(res.body.result[0].web_link).to.exist;
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
这是一个工作测试:
describe('Upload Endpoint - FL token ', function (){
this.timeout(15000);
it('Press Send w/out attaching photos returns error message', function (done){
config.api.post('/customer/upload') …Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习使用 supertest 和 mocha 进行测试。我读过supertest的api文档,它说supertest支持superagent提供的所有较低级别的API。SuperAgent 说我们可以通过以下方式发送 formData 对象:
request.post('/user')
.send(new FormData(document.getElementById('myForm')))
.then(callback)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 supertest 发送 formData 对象时,如下所示:
server
.post('/goal_model/images/' + userId + '/' + tmid)
.set('Authorization',`Bearer ${token}`)
.send(formData)
.expect("Content-type",/json/)
.expect(201)
.end(function(err,res){
should(res.status).equal(201);
console.log(res.message);
done();
});
Run Code Online (Sandbox Code Playgroud)
其中 formData 是这样的:
let file;
let formData = new FormData();
let fn = "../../../Downloads/Images/5k.jpg";
formData.append("image", file);
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试发送这个对象时,它只是说:
TypeError: "string" must be a string, Buffer, or ArrayBuffer
Run Code Online (Sandbox Code Playgroud)
是否可以通过这种方式发送 formData 对象?我做错了什么或者该怎么做?如果没有,为什么?我搜索了很多相关问题,但没有一个能解决我的问题。我现在真的很挣扎。
我done()在 Jest 测试中与一位同事发生争执。
他在 JavaScript 方面的经验比我多几个数量级,我是在async/await被普遍接受之后加入的,加上来自 .NET 环境,所以我已经习惯了。
我写我的测试是这样的:
it("should return 200 OK for POST method", async () => {
await request(app).post("SOMEENDPOINT")
.attach("file", "file")
.expect(200);
});
Run Code Online (Sandbox Code Playgroud)
他更习惯于承诺,所以会像这样编写他的测试:
it("should return 200 OK for POST method", (done) => {
request(app).post("SOMEENDPOINT")
.attach("file", "file")
.expect(200, done);
});
Run Code Online (Sandbox Code Playgroud)
他对我推送到async/ 没问题await,但坚持我必须包含done,这样我要么做他的版本修改版本:
it("should return 200 OK for POST method", async (done) => {
await request(app).post("SOMEENDPOINT")
.attach("file", "file")
.expect(200, done);
});
Run Code Online (Sandbox Code Playgroud)
或者:
it("should return 200 OK …Run Code Online (Sandbox Code Playgroud) 是否可以使用supertest测试Express JS REST API,但用模拟数据库对象替换实际的数据库连接?我有单元测试,涵盖了数据库模型和应用程序的其他部分,以及API端点的功能测试,使得实际的数据库连接,但我有一个奇怪的要求,创建像功能测试但使用模拟数据库连接的集成测试.示例端点控制器如下:
var model = require('../../../lib/models/list');
module.exports = {
index: function(req, res) {
var data = { key: 'domains', table: 'demo.events'};
var dataModel = new model(data);
dataModel.query().then(function(results) {
res.respond({data: results}, 200);
}).fail(function(err) {
console.log(err);
res.respond({message: 'there was an error retrieving data'}, 500);
});
}
};
Run Code Online (Sandbox Code Playgroud)
而URI的索引是
var express = require('express'), app, exports;
app = exports = module.exports = express();
exports.callbacks = require('./controller');
app.get('/', exports.callbacks.index);
Run Code Online (Sandbox Code Playgroud)
控制器中使用的列表模型连接到数据库并检索输出的数据.挑战是模拟实际的数据库调用,同时仍然使用supertest来发出请求并从URI中检索数据
任何信息都会有所帮助,包括你认为这是一个坏的或毫无意义的想法
我正在尝试为节点应用程序构建RESTful API.我建立了路线,一切都运行良好.但是当我尝试测试它时,它无法使DELETE方法工作,尽管它正常工作而不是在测试中.
以下是服务器和测试的代码.服务器:
// set up
var express = require('express');
var app = express(); // create our app w/ express
var path = __dirname; //root path
// configuration
app.configure(function() {
app.use(express.static(path));
//app.use(express.logger('dev')); // log every request to the console
app.use(express.json());
app.use(express.urlencoded()); // pull information from html in POST
app.use(express.methodOverride()); // simulate DELETE and PUT
});
function start() {
// routes
require('./app/routes.js')(app);
// listen (start app with node server.js)
app.listen(process.env.PORT || 5000);
console.log("Server listening for incoming conections..");
}
//************************
exports.start = …Run Code Online (Sandbox Code Playgroud) 我正在编写一个受API保护的REST API的集成测试jwt.一个API操作POST /user/token返回jwt给定的a username和a password,然后该令牌用于操作列表,例如:
GET /user/:id
Run Code Online (Sandbox Code Playgroud)
路由使用的位置jwt({secret: secret.secretToken}),因此令牌包含在http标头中Authorization.
使用超级测试进行测试时,我可以进行嵌套测试,但我想首先获取令牌,然后使用此令牌进行其他操作测试.
POST /user/token => 12345
GET /user/:id, `Authorization Bearer 12345`
GET /user/:foo, `Authorization Bearer 12345`
Run Code Online (Sandbox Code Playgroud)
如何避免为每个操作测试生成新令牌(见下文),但只使用一个由POST/user/token生成的令牌.
it('should get a valid token for user: user1', function(done) {
request(url)
.post('/user/token')
.send({ _id: user1._id, password: user1.password })
.expect(200) // created
.end(function(err, res) {
// test operation GET /user/:id
Run Code Online (Sandbox Code Playgroud) 在测试请求时/之后是否有任何方法可以直接访问req对象supertest?我想测试我的passport策略,所以我想检查一下req.user,req.session或许还有其他人.我知道我可以测试页面重定向或flash,因为这些是我的策略所做的,但是看看req对象上是否还有用户似乎很有用.如果我这样做,我还可以检查一次有多少用户.
我将使用"local-signup"策略对用户进行签名,该策略由此定义:
'use strict';
// get passport & mongoose
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var UserModel = require('mongoose').model('User');
module.exports = function() {
// signup function
passport.use('local-signup', new LocalStrategy({
passReqToCallback: true // pass the entire request to the callback
},
function(req, username, password, done) {
process.nextTick(function() {
// find a user with the same username
UserModel.findOne({username: username}, function(err, user) {
// if there is an error, …Run Code Online (Sandbox Code Playgroud) 当像这样使用超级测试时,
import app from "../../src/app";
import request from "supertest";
describe("GET / - a simple api endpoint", () => {
it("Hello API Request", () => {
const result = request(app)
.get("/api/location/5eda6d195dd81b21a056bedb")
.then((res) => {
console.log(res);
})
// expect(result.text).toEqual("hello");
// expect(result.status).toEqual(200);
});
});
Run Code Online (Sandbox Code Playgroud)
我越来越"Right-hand side of 'instanceof' is not callable"。
at Response.toError (node_modules/superagent/lib/node/response.js:94:15)
at ResponseBase._setStatusProperties (node_modules/superagent/lib/response-base.js:123:16)
at new Response (node_modules/superagent/lib/node/response.js:41:8)
at Test.Request._emitResponse (node_modules/superagent/lib/node/index.js:752:20)
at node_modules/superagent/lib/node/index.js:916:38
at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/parsers/json.js:19:7)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
status: 500,
text: `"Right-hand side of 'instanceof' is …Run Code Online (Sandbox Code Playgroud) 我正在努力使用超级测试解决我的笑话测试中的错误,我认为这是我的测试而不是我的代码的问题。
我的问题
我正在尝试使用 Node.js 和 Express、TDD 创建后端 API。我有以下文件来设置服务器:
//in app.js
const express = require('express');
const app = express();
app.post('api/1.0/users', (req, res) => {
return res.send();
});
module.exports = app;
//in index.js
const app = require('./app');
const port = 3000;
app.listen(port, () => console.log(`listening on port: ${port}`));
Run Code Online (Sandbox Code Playgroud)
当我运行服务器时,它在端口 3000 上成功运行。但是,当我运行以下测试时:
//in UserRegister.test.js
const request = require('supertest');
const app = require('../app'); //this is in a __tests__ subdir hence '..'
it('returns 200 OK when sign-up request is valid', (done) => {
request(app)
.post('api/1.0/users') …Run Code Online (Sandbox Code Playgroud) supertest ×10
node.js ×8
express ×5
mocha.js ×3
javascript ×2
jestjs ×2
async-await ×1
chai ×1
econnrefused ×1
endpoint ×1
express-jwt ×1
jwt ×1
passport.js ×1
rest ×1
superagent ×1
unit-testing ×1