Я выполняю модульное тестирование в узле 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 прошло.
Вы имеете в виду, мне нужно, чтобы написать одну его() для каждого поля? есть ли другой доступный вариант? –
Если вы хотите, чтобы отдельные тесты терпели неудачу или проходили мимо, они должны быть разделены на 'it()' s. Никоим образом не вокруг AFAIK. – robertklep