2016-09-30 2 views
0

Я выполняю модульное тестирование в узле js с помощью экспресс-js, и для тестирования я использую mocha и для издевательства над данными, использую sinon. Все в порядке, но моя проблема заключается в том, что я запускаю тестовый пример, если it() содержит несколько утверждений, и любой из них потерпел неудачу, а мокка показывает, что весь it() не выполнен. Но я хочу, чтобы другое утверждение прошло, хотя любой из них терпит неудачу. Я не хочу писать один он() для каждого поля. Мой тестовый кодMocha показ теста целостного блока не удался

//loading testing dependencies 
var request = require('supertest'); 
var server = require('./app'); 
var chai = require('chai'); 
var chaiHttp = require('chai-http'); 
var sinon = require("sinon"); 
var should = chai.should(); 

//configuring chai 
chai.use(chaiHttp); 

//ORM controller (we need to mock data in it's method) 
var rootController = require('./app/controllers/users/users_controller'); 

//Writing test cases 
describe('loading express', function() { 
    //mock data before each request 
    before(function(){ 
     //select the method of the ORM controller which you want to mock 
     sinon.stub(rootController, "get", //get is the method of ORM's customers_controller' 
     function(req, res, next){ 
     //response object which we are going to mock 
      var response = {}; 
      response.status = 'success', 
      response.data = { 
      userId: '[email protected]', 
      userName:'John' 
      }; 
      next(response); 
     }); 
    }); 
    it('responds to /users/getUserData', function testMethod(done) { 
    //call server file (app.js) 
    request(server) 
     //send request to the Express route which you want to test 
     .get('/users/getUserData?id=0987654321') 
     //write all expactions here 
     .expect(200) 
     .end(function(err, res){ 
     console.log("Generated response is ", res.body); 
     res.should.have.status(200); 
     res.body.should.be.a('object'); 
     //res.body.status.should.equal("success"); 
     res.body.data.userId.should.equal("[email protected]"); 
     res.body.data.userName.should.equal("John"); 
     //done is the callback of mocha framework 
     done(); 
     }); 

    }); 

    it('responds to /', function testSlash(done) { 
    request(server) 
     .get('/') 
     .expect(200, done); 
    }); 

    it('404 everything else', function testPath(done) { 
    request(server) 
     .get('/foo/bar') 
     .expect(404, done) 

    }); 

}); 

Вы можете увидеть здесь мой идентификатор пользователя должен быть неисправно и имя_пользователя должен быть принят, но когда я запускаю этот код он говорит, что отвечает/пользователей/getCustomerData получил не удалось. Вместо этого мокко должен сказать, что поле userId не получилось, и поле userName прошло.

ответ

2

Это не так Mocha и should Работа: когда утверждение не выполнено, should выдает сообщение об ошибке, а это означает, что остальная часть кода (включая любые последующие утверждения) не будет выполнена.

Вы можете переписать тест, так что запрос выполняется только один раз, но каждое утверждение по-прежнему испытывает отдельно:

describe('responds to /users/getUserData', function testMethod(done) { 
    let reqErr, reqRes; 

    before(function(done) { 
    request(server) 
     .get('/users/getUserData?id=0987654321') 
     .expect(200) 
     .end(function(err, res) { 
     reqErr = err; 
     reqRes = res; 
     done(); 
     }); 
    }); 

    it('should have the correct body type', function() { 
    reqRes.body.should.be.a('object'); 
    }); 

    it('should have the correct userId', function() { 
    reqRes.body.data.userId.should.equal("[email protected]"); 
    }); 

    it('should have the correct userName', function() { 
    reqRes.body.data.userName.should.equal("John"); 
    }); 

}); 
+0

Вы имеете в виду, мне нужно, чтобы написать одну его() для каждого поля? есть ли другой доступный вариант? –

+0

Если вы хотите, чтобы отдельные тесты терпели неудачу или проходили мимо, они должны быть разделены на 'it()' s. Никоим образом не вокруг AFAIK. – robertklep

Смежные вопросы