Попытка добавить метку времени к строке, но метка времени не определена - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь создать тестовый скрипт, используя node.js.Я использую assert и использую для этого среду тестирования mocha.Особенностью этого является тестирование того, что регистрация нового пользователя всегда возвращает 200. Для этого я объявил метку времени, используя следующий метод:

var currentDate = new Date();
var timestamp = currentDate.getTime();

var testInvitee = {
    "username": "name.lastname+11231232" + timestamp + "@company.com"
};

Идея заключается в том, что всякий раз, когда я запускаю тест,Строка должна отличаться, так как отметка времени изменится.Однако при запуске mocha я получаю следующий ответ:

Testing registration
   Register new user:

  AssertionError [ERR_ASSERTION]: 403 === 400
  + expected - actual

  -200
  +400

  at Context.it (test.js:596:28)
  at <anonymous>

Я сделал несколько вызовов console.log() в ходе выполнения сценария, которые показали, что timestamp не определено.См. Тело ответа ниже:

    Testing as System User.
 undefined


  Testing candidates
 undefined
    √ Get candidates (145ms)


//more code

  Testing registration
 undefined
    13) Register new user

Я не уверен, почему метка времени не определена в этом случае.Я ожидаю, что это будет миллисекунды с 1 января 1970 года, как обычно.Есть что-то, что я пропустил или сделал неправильно?Возможно, есть библиотека, которую я должен использовать?Если проблема не в timestamp, я должен предположить, что проблема более глубока в API, но я уверен, что это не так.

РЕДАКТИРОВАТЬ: Вот блок кода из describeit блоков на случай, если у меня возникла проблема и здесь:

 describe('Testing registration', function () {
    before(async () => {
        await backend.authenticate();
    });

    it('Register new user', async () => {
        const output = await backend.registerUser()
        console.log("", backend.timestamp);
        switch (userLevel) {
            case "CLIENT_ADMIN":
                assert.strictEqual(200, output.statusCode);
                break;
            case "ADMIN":
                assert.strictEqual(200, output.statusCode);
                break;
            case "GROUP_ADMIN":
                assert.strictEqual(200, output.statusCode);
                break;
            case "HR":
                assert.strictEqual(200, output.statusCode);
                break;
            case "USER":
                assert.strictEqual(200, output.statusCode);
                break;
            default:
                console.log("No case match");
                break;
            }

        });

    })

1 Ответ

0 голосов
/ 14 декабря 2018

Проблема, скорее всего, заключается в объеме.

Ваш код объявления timestamp правильный.Но тот факт, что в тестах это значение равно undefined, говорит нам о том, что область тестирования не имеет доступа к области, в которой вы определили timestamp.

Самой простой проверкой для этого будет добавление декларации timestamp непосредственно перед ее использованием в тесте.

Или просто вставьте это: var testInvitee = { username: "name112233" + new Date().getTime() + "@company.com" }

Кроме того, трудно сказать без полного кода.Плюс, почему вы проверяете backend.timestamp с console.log в тесте?

...