javascript - 如何在 Mocha 中维护两个请求之间的 session

标签 javascript rest session mocha.js

我正在使用mocha测试框架来测试rest-api。为了维持 session ,我使用 super 测试的代理。我正在使用 sessoin_key 访问 REST-API。但我认为代理正在使用cookie来访问REST-API。但我不想用这个。因为在我的项目中,我们通过 session_key 与其他 REST-API 进行 session 。

Rest-API 端点为:/rest_api/addCarpenter
请求正文添加木匠:

  Request Body:
  {
    "first_name": "john",
    "last_name": "cooper",
    "session_key": "dshjdhs78237",
  }

在请求正文中,我们发送 session_key,我编写了以下测试用例来测试 add carpenter 但出现 Uncaught AssertionError:预期 1 等于 0。

var supertest = require("supertest");
var assert = require("assert");
var expect = require("chai").expect;

var request = require('supertest'), 
   should = require('chai').should();

describe('Test session', function() {
  var agent = request.agent('http://localhost:8000') ;

  before(function(done){
      agent
        .post('/rest_api/login')
        .send({'username': 'Bill', 'password': 'xyz'})
        .end(function(err, res) {
          if (err) return done(err);
          done();
        });
  })

  after(function(done){
      agent
        .get('/rest_api/logout')
        .end(function(err, res) {
          if (err) return done(err);
          done();
        });
  })
  describe('test add corpenter', function(){
    it('should return error=1 after login', function (done) {
      agent
        .post('/api/addCarpenter')
        .send({"first_name": "Bill", "last_name": "cooper", "mobile1": 9090907789,})
        .end(function (err, res) {
          if (err) return done(err);

          res.body.error.should.equal(0);
          done();
        });
    });
  });
});

断言错误:

 Uncaught AssertionError: expected 1 to equal 0
      + expected - actual

      -1
      +0

      at Test.<anonymous> (justTest.js:38:33)
      at Test.assert (node_modules/supertest/lib/test.js:156:6)
      at assert (node_modules/supertest/lib/test.js:127:12)
      at node_modules/supertest/lib/test.js:124:5
      at Test.Request.callback (node_modules/supertest/node_modules/superagent/lib/node/index.js:785:12)
      at IncomingMessage.<anonymous> (node_modules/supertest/node_modules/superagent/lib/node/index.js:990:12)
      at _stream_readable.js:920:16

最佳答案

如果你想要session_key在您的请求正文中,您应该手动将其添加到您要发送的对象中:

.send({"first_name": "Bill", "last_name": "cooper", "mobile1": 9090907789, "session_key": theSessionKey})

如果您想保持目前的测试布局,我会介绍这个 theSessionKey在 describe() 级别,因此将其添加到 agent 的声明下方变量。

现在设置 theSessionKey before() 中的变量基于 res 的内容的函数调用登录后。

您应该为 null theSessionKeyafter()部分。

关于javascript - 如何在 Mocha 中维护两个请求之间的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739328/

相关文章:

session - 如果我使用 J2EE session ,我是否需要 ColdFusion session ?

php - 登录名,用户身份验证, session 和csrf token

javascript - 空注入(inject)器错误 : StaticInjectorError(DynamicTestModule) When Testing in Angular 2

javascript - 为什么当我在另一个函数完成后调用函数时,它会调用所有之前的函数?

javascript - 如何在鼠标悬停表格行上的鼠标旁边显示图像

javascript - ScrollView 以编程方式滚动按钮按下 react native

java - 未找到 Java 类 java.util.ArrayList... 和 MIME 媒体类型文本/xml 的消息正文编写器

rest - 如何设计数据库幂等微服务(POST)

java - Dropwizard/JAX-RS 1.x (JSR 311) 中的资源链接

php - 在 HTTP 和 HTTPS 之间传递 session 变量