Javascript 摩卡将变量传递到下一个测试

Javascript 摩卡将变量传递到下一个测试,javascript,testing,mocha.js,Javascript,Testing,Mocha.js,上述方法目前在摩卡不起作用 解决方案是在测试之间共享一个变量,如上所示 使用async.falter()这是非常可能的,我非常喜欢它。有没有办法让它在摩卡实现 谢谢 最好将测试隔离,以便一个测试不依赖于另一个测试中执行的计算。让我们将通过值测试的测试称为测试a,将通过值测试的测试称为测试B。需要考虑的一些问题: 测试A和测试B真的是两种不同的测试吗?如果没有,它们可以合并 测试A是否意味着为测试B提供测试夹具?如果是这样,测试A应该成为每次调用之前或之前的回调。基本上,您可以通过在descrip

上述方法目前在摩卡不起作用

解决方案是在测试之间共享一个变量,如上所示

使用
async.falter()
这是非常可能的,我非常喜欢它。有没有办法让它在摩卡实现


谢谢

最好将测试隔离,以便一个测试不依赖于另一个测试中执行的计算。让我们将通过值测试的测试称为测试a,将通过值测试的测试称为测试B。需要考虑的一些问题:

  • 测试A和测试B真的是两种不同的测试吗?如果没有,它们可以合并

  • 测试A是否意味着为测试B提供测试夹具?如果是这样,测试A应该成为每次调用之前
    或之前
    的回调。基本上,您可以通过在
    descripe
    的闭包中将数据分配给变量来传递数据

    describe('some test', function(){
        // Could put here a shared variable
        it('should pass a value', function(done){
            done(null, 1);
        });
        it('and then double it', function(value, done){
            console.log(value * 2);
            done();
        });
    });
    

  • 我读过摩卡的代码,如果我没有忘记什么,就没有办法调用
    描述
    ,或
    完成
    回调来传递值。所以上面的方法就是它。

    非常同意路易斯所说的,这就是摩卡咖啡实际上不支持它的原因。想想你引用的异步方法;如果您的第一个测试失败,那么您将在其余测试中遇到瀑布式失败

    正如你所说,你唯一的方法就是在顶部粘贴一个变量:

    describe('some test', function(){
        var fixture;
    
        before(function(done){
            fixture = ...;
            done();
        });
    
        it('do something', function(done){
            fixture.blah(...);
            done();
        });
    });
    

    也可以添加到suit或context对象中

    在本例中,它被添加到suit对象中

    describe('some test', function(){
        var value = 0;
        it('should pass a value', function(done){
            value = 5;
            done();
        });
        it('and then double it', function(done){
            console.log(value * 2); // 10
            done();
        });
    });
    

    您好,您的语句有一个小的修正(引用async的文档):
    如果任何函数将错误传递给回调函数,则不会执行下一个函数,并且会立即调用主回调函数并显示错误
    。。。但是谢谢你。是的,但是这种方法的问题是你会完全取消以下测试的执行,而不是第一次测试失败,然后继续下一个阶段——这有意义吗?@AnthonyMayfield发布一些代码:)也许是要点吧。我想我现在明白了!在您的示例中,两个测试都是同步的,在我的示例中,我尝试在运行一些异步之后更新变量。我很确定我需要使用摩卡咖啡的after方法,现在就开始阅读文档。不过,谢谢你的提议:)不,事实证明描述套件是按顺序运行的。谜团解开了!哈哈,你觉得呢?我在before()方法中获得了一个访问令牌,几乎每个后续测试都需要使用它。请注意,如果您没有使用箭头函数,这里的
    this
    是一个不同的
    this
    。。。我想。(至少,在我的例子中,我试图做的没有起作用,直到我意识到我混合了箭头和正常函数。)mocha建议不要使用箭头函数:这是正确的。这只适用于箭头函数。和非箭头函数的换行
    describe('suit', function(){
        before(() => {
            this.suitData = 'suit';
        });
    
        beforeEach(() => {
            this.testData = 'test';
        });
    
    
        it('test', done => {
             console.log(this.suitData)// => suit
             console.log(this.testData)// => test
        })
    });