Feathers: рд╕реБрдкрд░рдЯреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп "рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░рдгрдиреАрддрд┐ 'рд╕реНрдерд╛рдиреАрдп' рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИ"

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рд╕рд┐рддре░ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: feathersjs/feathers

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкрдВрдЦ рдРрдк рдмрдирд╛рдПрдВред

# use the default value for each prompt
feathers g app
feathers g authentication

supertest рдХреЛ рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

npm i -D supertest

рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рдХреЛ test/services/authentication.test.js :

const supertest = require('supertest');
const app = require('../../src/app');
const config = require('../../config/default.json');

const testUser = {
  email: '[email protected]',
  password: 'password1234',
};

describe('POST /authentication', () => {
  beforeEach(() => {
    // delete all users then create the test user
    return app.service('users').remove(null)
      .then(() => app.service('users').create(Object.assign({}, testUser)));
  });

  afterEach(() => {
    // delete all users
    return app.service('users').remove(null);
  });

  it.only('creates a valid JWT', () => {
    return supertest(app)
      .post('/authentication')
      .type('json')
      .send(Object.assign({strategy: 'local'}, testUser))
      .expect(201)
      .then(res => {
        return app.passport.verifyJWT(res.body.accessToken, {
          secret: config.authentication.secret,
        });
      });
  });
});

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдБред

npm test

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

рдкрд░реАрдХреНрд╖рдг рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

  POST /authentication
info: after: users - Method: remove
info: after: users - Method: create
info: error: authentication - Method: create: Authentication strategy 'local' is not registered.
error:  BadRequest: Authentication strategy 'local' is not registered.
    at Error.BadRequest (D:\Users\Jordan\Desktop\feathers-test-test2\node_modules\feathers-errors\lib\index.js:93:17)
    at Object.<anonymous> (D:\Users\Jordan\Desktop\feathers-test-test2\node_modules\feathers-authentication\lib\hooks\authenticate.js:62:29)
    at process._tickCallback (internal/process/next_tick.js:109:7)
    1) creates a valid JWT
info: after: users - Method: remove


  0 passing (381ms)
  1 failing

  1) POST /authentication creates a valid JWT:
     Error: expected 201 "Created", got 400 "Bad Request"
      at Test._assertStatus (node_modules\supertest\lib\test.js:266:12)
      at Test._assertFunction (node_modules\supertest\lib\test.js:281:11)
      at Test.assert (node_modules\supertest\lib\test.js:171:18)
      at Server.assert (node_modules\supertest\lib\test.js:131:12)
      at emitCloseNT (net.js:1552:8)
      at _combinedTickCallback (internal/process/next_tick.js:77:11)
      at process._tickCallback (internal/process/next_tick.js:104:9)

рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдиреНрдпрд╛рд╕

рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдг :

{
  "dependencies": {
    "body-parser": "^1.17.2",
    "compression": "^1.7.0",
    "cors": "^2.8.4",
    "feathers": "^2.2.0",
    "feathers-authentication": "^1.2.7",
    "feathers-authentication-hooks": "^0.1.4",
    "feathers-authentication-jwt": "^0.3.2",
    "feathers-authentication-local": "^0.4.4",
    "feathers-configuration": "^0.4.1",
    "feathers-errors": "^2.9.1",
    "feathers-hooks": "^2.0.2",
    "feathers-hooks-common": "^3.7.2",
    "feathers-nedb": "^2.7.0",
    "feathers-rest": "^1.8.0",
    "feathers-socketio": "^2.0.0",
    "helmet": "^3.8.1",
    "nedb": "^1.8.0",
    "serve-favicon": "^2.4.3",
    "winston": "^2.3.1"
  },
  "devDependencies": {
    "eslint": "^4.6.1",
    "mocha": "^3.5.0",
    "request": "^2.81.0",
    "request-promise": "^4.2.1",
    "supertest": "^3.0.0"
  }
}

NodeJS рд╕рдВрд╕реНрдХрд░рдг : v6.11.2

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрджрд┐ рдЖрдк app.listen рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ app.setup(server) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рд╣рд┐рдд) setup рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ (рдЬреИрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ) рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЦреБрдж рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдлрд╝реЗрджрд░-рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдлрд╝рд┐рдВрдЧ рдХрд╛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд╕рдордп рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк app.listen рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ app.setup(server) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рд╣рд┐рдд) setup рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ (рдЬреИрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ) рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЦреБрдж рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдзрдиреНрдпрд╡рд╛рджред рд╡рд╣ рдореБрджреНрджрд╛ рдерд╛ред рдореИрдВрдиреЗ рдорд╛рдирд╛ рдХрд┐ supertest рдХреЙрд▓ app.listen , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ http.createServer(app).listen рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╡рд╣ рдХрд╛рдордХрд╛рдЬ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдЖрдпрд╛ рд╣реВрдВ:

const supertest = require('supertest');
const app = require('../../src/app');
const config = require('../../config/default.json');

const testUser = {
  email: '[email protected]',
  password: 'password1234',
};

describe('POST /authentication', () => {
  let server;

  beforeEach(done => {
    // start the app
    server = app.listen(0, done);
  });

  beforeEach(() => {
    // delete all users then create the test user
    return app.service('users').remove(null)
      .then(() => app.service('users').create(Object.assign({}, testUser)));
  });

  afterEach(() => {
    // delete all users
    return app.service('users').remove(null);
  });

  afterEach(done => {
    // stop the app
    server.close(done);
  });

  it('creates a valid JWT', () => {
    return supertest(server)
      .post('/authentication')
      .type('json')
      .send(Object.assign({strategy: 'local'}, testUser))
      .expect(201)
      .then(res => {
        return app.passport.verifyJWT(res.body.accessToken, {
          secret: config.authentication.secret,
        });
      });
  });
});

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдкрдиреЗ рдЖрдк рд▓реЙрдХ рд╣реЛ рдЧрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rstegg picture rstegg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arve0 picture arve0  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

NetOperatorWibby picture NetOperatorWibby  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eric-burel picture eric-burel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

corymsmith picture corymsmith  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ