2015-07-21 20 views
6

Şu anda SailsJS kullanarak bir uygulama yazıyorum. Şimdiye kadar yapılmış olan şey, 'elle' test edildiğinde beklendiği gibi çalışır, ancak Mocha ile test edildiğinde yapılmaz.SailsJS ve Superagent ile Mocha testleri Koşu

[...] 
"scripts": { 
    "start": "node app.js", 
    "debug": "node debug app.js", 
    "test": "mocha test/bootstrap.test.js test/unit/**/*.test.js" 
}, 
[...] 

Testim dizin yapısı aşağıdaki gibidir:

test 
├── bootstrap.test.js 
├── mocha.opts 
└── unit 
    └── controllers 
     └── UserController.test.js 

boostrap.test.js:

var Sails = require('sails'); 
var sails; 

before(function(done) { 
    Sails.lift(function(err, server) { 
    sails = server; 
    if (err) return done(err); 
    done(err, sails); 
    }); 
}); 

after(function(done) { 
    Sails.lower(done); 
}); 

Ben NPM ile testini çağırarak, SailsJS testing guide takip etmeye çalıştık

UserController.test.js:

> [email protected] test /Users/fwoelffel/Dev/STOFMA 
> mocha test/bootstrap.test.js test/unit/**/*.test.js 



    UsersController 
    #logout() 
debug: false 
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}} 
info: Policy 'authenticated' disallowed to proceed to the next policy 
     ✓ should respond with a 401 status because nobody is logged in (86ms) 
    #signup() 
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true 
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}} 
info: Policy 'unauthenticated' allowed to proceed to the next policy 
info: User [email protected] signed up and logged in. 
     ✓ should create and log in an user (146ms) 
    #logout() 
debug: false 
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}} 
info: Policy 'authenticated' disallowed to proceed to the next policy 
     1) should log out an user 
    #login() 
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true 
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}} 
info: Policy 'unauthenticated' allowed to proceed to the next policy 
info: No user matching [email protected] 
     ✓ should respond with a 404 status because credentials are invalid (66ms) 
    #login() 
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true 
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}} 
info: Policy 'unauthenticated' allowed to proceed to the next policy 
info: Found user [email protected] 
info: [email protected] credentials are valid. 
     ✓ should log in an user (128ms) 
    #login() 
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true 
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}} 
info: Policy 'unauthenticated' allowed to proceed to the next policy 
info: Found user [email protected] 
info: [email protected] credentials are valid. 
     2) should respond with a 401 status because user is already logged in 


    4 passing (1s) 
    2 failing 

    1) UsersController #logout() should log out an user: 
    Error: expected 200 "OK", got 401 "Unauthorized" 
     at net.js:1419:10 

    2) UsersController #login() should respond with a 401 status because user is already logged in: 
    Error: expected 401 "Unauthorized", got 200 "OK" 
     at net.js:1419:10 



npm ERR! Test failed. See above for more details. 

Bir auth/UNAUTH API test ediyorum şeyleri özetlemek için: Ben npm testi çağırdığınızda

var request = require('supertest'); 

describe('UsersController', function() { 

    describe('#logout()', function() { 
    it('should respond with a 401 status because nobody is logged in', function (done) { 
     request(sails.hooks.http.app) 
     .put('/user/logout') 
     .expect(401, done) 
    }); 
    }); 

    describe('#signup()', function() { 
    it('should create and log in an user', function (done) { 
     request(sails.hooks.http.app) 
     .post('/user') 
     .send({ 
      firstname: 'foo', 
      name: 'bar', 
      email: '[email protected]', 
      sex: true, 
      password: 'foobar', 
      birthdate: '01/01/1991', 
      phoneNumber: '+33 3 10 10 10' 
     }) 
     .expect(200, done) 
    }); 
    }); 

    describe('#logout()', function() { 
    it('should log out an user', function (done) { 
     request(sails.hooks.http.app) 
     .put('/user/logout') 
     .expect(200, done) 
    }); 
    }); 

    describe('#login()', function() { 
    it('should respond with a 404 status because credentials are invalid', function (done) { 
     request(sails.hooks.http.app) 
     .put('/user/login') 
     .send({ 
      email: '[email protected]', 
      password: 'barfoo' 
     }) 
     .expect(404, done) 
    }); 
    }); 

    describe('#login()', function() { 
    it('should log in an user', function (done) { 
     request(sails.hooks.http.app) 
     .put('/user/login') 
     .send({ 
      email: '[email protected]', 
      password: 'foobar' 
     }) 
     .expect(200, done); 
    }); 
    }); 

    describe('#login()', function() { 
    it('should respond with a 401 status because user is already logged in', function (done) { 
     request(sails.hooks.http.app) 
     .put('/user/login') 
     .send({ 
      email: '[email protected]', 
      password: 'foobar' 
     }) 
     .expect(401, done); 
    }); 
    }); 
}); 
Son olarak, burada benim çıkıştır. Bir aşağıda koşullarıdır:

bir kullanıcı oturum giriş yapmaya çalışırsa
  • , 'doğrulanmamış' politikası bir hata atarsam bir kullanıcı oturum (401)
  • , 'doğrulanmamış kaydolmak çalışır doğrulanmış 'politikası bir hata oluşturması gerekir' politikası bir hata bir çıkış yapmış kullanıcı oturumu çalıştığında,
  • (401) atarsam'(401) yanlış bir şey yapıyor olabilir

ama gerçekten can ne olduğunu anlamıyorum. Bu sorunu çözmeye yardımcı olabilir misiniz?

Daha fazla bilgiye ihtiyacınız varsa, lütfen sorunuz. Kodu (test yapmadan, başarısız olduklarından) on Github bulabilirsiniz.

Okumak için teşekkürler, iyi günler! olmaz Öyle Bir kullanıcı daha önceki bir istekte loggedin, oturum devam ediliyor olmadığını düşünüyorum

var request = require('supertest'); 
var agent; 

describe('UsersController', function() { 

    before(function(done) { 
    agent = request.agent(sails.hooks.http.app); 
    done(); 
    }) 

    describe('#logout()', function() { 
    it('should respond with a 401 status because nobody is logged in', function (done) { 
     agent 
     .put('/user/logout') 
     .expect(401, done) 
    }); 
    }); 

    describe('#signup()', function() { 
    it('should create and log in an user', function (done) { 
     agent 
     .post('/user') 
     .send({ 
      firstname: 'foo', 
      name: 'bar', 
      email: '[email protected]', 
      sex: true, 
      password: 'foobar', 
      birthdate: '01/01/1991', 
      phoneNumber: '+33 3 10 10 10' 
     }) 
     .expect(200, done) 
    }); 
    }); 

    describe('#logout()', function() { 
    it('should log out an user', function (done) { 
     agent 
     .put('/user/logout') 
     .expect(200, done) 
    }); 
    }); 

    describe('#login()', function() { 
    it('should respond with a 404 status because credentials are invalid', function (done) { 
     agent 
     .put('/user/login') 
     .send({ 
      email: '[email protected]', 
      password: 'barfoo' 
     }) 
     .expect(404, done) 
    }); 
    }); 

    describe('#login()', function() { 
    it('should log in an user', function (done) { 
     agent 
     .put('/user/login') 
     .send({ 
      email: '[email protected]', 
      password: 'foobar' 
     }) 
     .expect(200, done); 
    }); 
    }); 

    describe('#login()', function() { 
    it('should respond with a 401 status because user is already logged in', function (done) { 
     agent 
     .put('/user/login') 
     .send({ 
      email: '[email protected]', 
      password: 'foobar' 
     }) 
     .expect(401, done); 
    }); 
    }); 
}); 

cevap

4

:

GÜNCELLEME

sayesinde ben için kodumu değiştirdi, elsaar için Daha sonra gelen bir istekte oturum açmak. Birim testlerin nasıl olması gerektiği. Bu nedenle, testin çalıştırılmasından önce kullanıcının istenen belirtilen (giriş yapmış ya da dışarıda) olduğundan emin olmanız gerekir.

DÜZENLEME - Kendi oturumu devam etmek Supertest ajanın aynı örneği kullanmak gerek - https://github.com/visionmedia/supertest/issues/46#issuecomment-58534736

Dolayısıyla, sadece testlerin başında bunu ve tüm testlerde aynı maddeyi kullanmak

var supertest = require('supertest'); 
    agent = supertest.agent(sails.hooks.http.app); 

// the use the agent to test your endpoints 
+0

Aradığım şey budur. Teşekkürler! – FWoelffel