在MochaJS测试套件中使用--globals变量
Using the --globals variable with MochaJS testing suite
我正在尝试使用mocha在sailjs系统上进行端到端测试。我想做的是通过创建一个用户,然后与该用户一起执行其他操作来模拟动作程序流。
我希望能够将我的测试分离成单独的文件,这些文件按照不同操作的顺序运行,例如"注册新用户"等。要做到这一点,我需要能够在测试文件之间传递值。
Mocha包含一个选项设置--globals <value1, value2, etc>
。以下是文档中的描述:
--globals允许给定的逗号分隔的global[名称]
然而,我一直无法让它发挥作用。这是我试过的。我有一个bootstrap.test.js文件,它在操作之前和之后做基本的操作,启动和停止航行:
var Sails = require('sails'),
sails;
before(function(done) {
Sails.lift({
log: {
level: 'error'
}
}, function(err, server) {
sails = server;
if (err) return done(err);
// here you can load fixtures, etc.
done(err, sails);
});
});
after(function(done) {
// here you can clear fixtures, etc.
sails.lower(done);
});
然后假设我有两个测试文件a.js
和b.js
,它们将连续运行,并且为了测试目的只包含很少的内容:
a.js:
var user = 'some user';
b.js:
console.log( user );
如果我运行mocha --globals
,我会得到错误:
ReferenceError:用户未定义
我在这里做错了什么?我在网上找不到关于如何使用它的描述。
您误解了--globals
的用途。当您使用--check-leaks
时,可以使用它。--check-leaks
选项检查测试是否将变量泄漏到全局空间中。考虑一下这个套件:
it("one", function () {
foo = 1;
});
如果你用mocha --check-leaks
运行它,你会得到一个错误,因为测试会创建一个新的foo
全局。您可以使用mocha --check-leaks --globals foo
防止该错误。在大型项目中,可能存在被认为是正常的泄漏,因此使用--globals
选项可以关闭那些正常情况下的错误。
现在,你如何才能实现你想要做的事情?如果使用var
,则无法创建全局变量。您的a.js
必须是:
user = 'some user';
此外,默认情况下,Mocha在加载测试文件时不保证订单。您可以使用--sort
来保证首先加载a.js
,但随后您必须使用一个能够保证此顺序的名称。我更喜欢使用--require a
,它告诉Mocha在开始读取测试文件之前需要a
模块。您的模块可以称为z
,并且仍然会在任何测试文件之前加载。无论如何,通过删除var
并使用--require
,您的测试文件将看到您的全局。(我试过了:它有效。(
这似乎对我使用sailsjs有效(我认为有更好的方法可以做到这一点(,我运行的第一个测试之一是注册用户:
describe('#Should register test user', function () {
it('should register user', function (done) {
request(sails.hooks.http.app)
.post('/auth/registertest')
.send({
"email": "email@foo.com.au",
"password": "foo",
"firstname": "foo",
"lastname": "foo",
"location": {
"name": "foo",
"id": "54d733795ed3f5140b0a761b"
}
})
.expect(200).end(function (err, res) {
if (err) return done(err);
global.email = "email@tpg.com.au";
global.token = res.body.token;
done();
})
});
});
然后,我就可以访问注册用户测试后运行的其他测试文件中的全局电子邮件和令牌变量,例如下面的调用我的api并使用Authorization标头中的全局令牌变量。
describe('#auth access to users bunches', function () {
it('should get 200', function (done) {
request(sails.hooks.http.app)
.get('/bunch/byuser')
.set('Authorization', 'bearer ' + token)
.expect(200).end(function (err, res) {
if (err) return done(err);
done();
})
});
});
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 如何将全局变量放在Globals.js模块中,并在其他模块中访问它们
- 在MochaJS测试套件中使用--globals变量