Javascript 在MochaJS测试套件中使用--globals变量

Javascript 在MochaJS测试套件中使用--globals变量,javascript,testing,sails.js,mocha.js,Javascript,Testing,Sails.js,Mocha.js,我正在尝试在一个使用的系统上进行端到端测试的变体。我想做的是通过创建一个用户,然后对该用户执行其他操作来模拟动作程序流 我希望能够将我的测试分离到单独的文件中,这些文件按照与不同操作相关的顺序运行,例如“注册新用户”等。为此,我需要能够在测试文件之间传递值 摩卡咖啡包含一个选项设置--globals。以下是文档中的描述: --globals允许给定的逗号分隔的全局[名称] 然而,我一直无法让它工作。这是我试过的。我有一个bootstrap.test.js文件,它在操作之前和之后执行基本操作,启动

我正在尝试在一个使用的系统上进行端到端测试的变体。我想做的是通过创建一个用户,然后对该用户执行其他操作来模拟动作程序流

我希望能够将我的测试分离到单独的文件中,这些文件按照与不同操作相关的顺序运行,例如“注册新用户”等。为此,我需要能够在测试文件之间传递值

摩卡咖啡包含一个选项设置--globals。以下是文档中的描述:

--globals允许给定的逗号分隔的全局[名称]

然而,我一直无法让它工作。这是我试过的。我有一个bootstrap.test.js文件,它在操作之前和之后执行基本操作,启动和停止SAIL:

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:

b、 js:

如果然后运行
mocha--globals
,则会出现以下错误:

ReferenceError:未定义用户


我做错了什么?我在网上找不到关于如何使用它的描述。

这似乎对我使用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并在授权标头中使用全局令牌变量

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();
            })
    });
});

您误解了
--globals
的目的。当您使用<代码>--检查泄漏时,可能会使用它。
--check leaks
选项检查测试是否将变量泄漏到全局空间。考虑这个套房:

it("one", function () {
    foo = 1;
});
如果您使用
mocha--check leaks
运行它,您将得到一个错误,因为测试创建了一个新的
foo
global。您可以使用
mocha--check leaks--globals foo
来防止错误。在大型项目中,可能存在被视为正常的泄漏,因此使用
--globals
选项可以关闭正常情况下的错误

现在,你怎样才能实现你想做的事?如果使用
var
,则无法创建全局变量。您的
a.js
必须是:

user = 'some user';

此外,默认情况下,Mocha在加载测试文件时不保证订单。您可以使用
--sort
来保证先加载
a.js
,但随后必须使用一个名称来保证此顺序。我更喜欢使用
——require a
,它告诉摩卡在开始读取测试文件之前需要模块
a
。您的模块可以被称为
z
,并且仍然会在任何测试文件之前加载。无论如何,通过删除
var
并使用
--require
您的测试文件将看到您的全局设置。(我试过了:它可以工作。)

似乎我可以通过使用global.[variable]来实现这一点,并且一旦分配了一个值,就可以在其他测试中访问它。这有帮助吗?你能给出一个更广泛的代码示例吗?谢谢
it("one", function () {
    foo = 1;
});
user = 'some user';