Node JS Как правильно использовать петли в мокко? - PullRequest
0 голосов
/ 24 января 2020

Я успешно провожу первый тест мокко, он должен выполнить итерацию по массиву matchIds и затем выполнить тест.

предположим, у меня есть 5 matchIds, затем мой тест выполняется 5 раз.

Я использовал (mocha-each) модуль.

Затем я пытаюсь выполнить l oop в этом тесте, чтобы выполнить его много раз (с помощью для l oop), для этого я должен получить параметр из принципал api (match / parts), то есть (partId), а другой полученный параметр - matchIds,

Но проблема в том, что при выполнении и итерации с moch-each у меня все время одинаковое значение matchIds и partIds, которые неверны.

как я могу решить эту проблему и использовать новые значения параметров, спасибо.

Код

const expect = require('expect');
const forEach = require('mocha-each');
const app = require('../app');



 var MatchSchema = require('./Schema/MatchSchema');



  let Match =module.exports = mongoose.model(MatchSchema.ModelName, MatchSchema.Schema);

    var matchIds = [];

    describe('POST /match/parts', () => {
    for(var i = 0; i < 5; i++){
            it('should get matchIds and partId to be used as params',(done) =>
        {
            request(app)
                .post('/myApi')
                .set({'Authorization': "my token"})
                .send({"param1" : "250"})
                .expect(200)
                .expect((res) => {

                //reinitialize array, in each loop, we should use new values
                //array will be looped on
                matchIds = [];
                for(var i = 0; i < res.body.data.matchs.length; i++)
                {
                matchIds.push(res.body.data.matchs[i].MatchID)
            }
            //parts id will be used as param
            partsId = res.body.data.partsID;



             //the loop test is executed
          describe('POST /match/play', () => {
            matchIds.forEach(function(matchId) {
            it('should play quiz', (done) =>
            {
                //Problem : these params (matchId and partId)
                // are always the same after end of the first iteration of the loop for

                Match.findOne({'MatchID': matchId}).then((result) => {
                expect(result).not.toBeNull();

            let response = result.Response



            request(app)
                .post('/match/play')
                .set({'Authorization': "myToken"})
                .send({
                    "partsID": partsId,
                    "matchId": matchId,
                    "response": response
                })
                .expect(200)
                .expect((res) => {

            expect(res.body.success).toBe(true);
            expect(res.body.data).not.toBeNull();


        }).
            end((err) => {

                if(err) return done(err);
            done();

            });


        });
        });
        });
          });
        });
    });
    }).
        end((err) => {

            if(err) return done(err);

    done();

    });

    });
}
});
...