尝试将时间戳附加到字符串,但时间戳未定义

时间:2018-12-13 17:38:51

标签: node.js mocha assert

我正在尝试使用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

我不确定在这种情况下为什么未定义时间戳。我预计它会像通常那样自1970年1月1日起以毫秒为单位。有什么我错过或做错的事情吗?也许我应该使用一个图书馆?如果不是引起问题的timestamp,我必须假设问题在API中更严重,但是我肯定不是这种情况。

编辑:这是describe it块中的代码块,以防万一我在这里也引起了问题:

 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 :(得分:0)

问题很可能是在范围内。

您用于声明timestamp的代码是正确的。但是,在测试中值为undefined的事实告诉我们,测试范围无法访问您定义timestamp的范围。

最简单的检查方法是在测试中使用timestamp声明之前。

或者只是内联它: var testInvitee = { username: "name112233" + new Date().getTime() + "@company.com" }

除此之外,没有完整的代码很难说。另外,为什么还要在测试中使用console.log检查backend.timestamp