рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкрдВрдЦ рдРрдк рдмрдирд╛рдПрдВред
# 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
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ (рдЬреИрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ) рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЦреБрдж рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдзрдиреНрдпрд╡рд╛рджред рд╡рд╣ рдореБрджреНрджрд╛ рдерд╛ред рдореИрдВрдиреЗ рдорд╛рдирд╛ рдХрд┐ 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,
});
});
});
});
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдкрдиреЗ рдЖрдк рд▓реЙрдХ рд╣реЛ рдЧрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрджрд┐ рдЖрдк
app.listen
рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ app.setup(server) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рд╣рд┐рдд)setup
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ (рдЬреИрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ) рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЦреБрдж рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред