尝试将时间戳附加到字符串但时间戳未定义
Trying to append timestamp to string but timestamp is undefined
我正在尝试使用 node.js 构建测试脚本。我正在利用 assert 并为此使用 mocha 测试框架。此功能的一个特点是测试注册新用户总是 returns 200。为此,我使用以下方法声明了时间戳:
var currentDate = new Date();
var timestamp = currentDate.getTime();
var testInvitee = {
"username": "name.lastname+11231232" + timestamp + "@company.com"
};
我的想法是,每当我 运行 测试时,字符串应该不同,因为时间戳会改变。但是,当 运行ning 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;
}
});
})
问题,很有可能是在范围内。
您声明 timestamp
的代码是正确的。但在测试中值为 undefined
的事实告诉我们,测试范围无法访问您定义 timestamp
的范围。
最简单的检查是在测试中使用之前添加 timestamp
声明。
或者只是内联它:
var testInvitee = {
username: "name112233" + new Date().getTime() + "@company.com"
}
除此之外,如果没有完整的代码就很难分辨。另外,为什么要在测试中用 console.log 检查 backend.timestamp
?
我正在尝试使用 node.js 构建测试脚本。我正在利用 assert 并为此使用 mocha 测试框架。此功能的一个特点是测试注册新用户总是 returns 200。为此,我使用以下方法声明了时间戳:
var currentDate = new Date();
var timestamp = currentDate.getTime();
var testInvitee = {
"username": "name.lastname+11231232" + timestamp + "@company.com"
};
我的想法是,每当我 运行 测试时,字符串应该不同,因为时间戳会改变。但是,当 运行ning 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;
}
});
})
问题,很有可能是在范围内。
您声明 timestamp
的代码是正确的。但在测试中值为 undefined
的事实告诉我们,测试范围无法访问您定义 timestamp
的范围。
最简单的检查是在测试中使用之前添加 timestamp
声明。
或者只是内联它:
var testInvitee = {
username: "name112233" + new Date().getTime() + "@company.com"
}
除此之外,如果没有完整的代码就很难分辨。另外,为什么要在测试中用 console.log 检查 backend.timestamp
?