由于范围不好,Mocha测试共享状态?

时间:2014-11-22 21:18:19

标签: javascript mocha

我有一个文件“mochatest.js”,如下所示:

(function(){
    var MyObject = function(){
        var myCount= 0;
        return{
            count: myCount
        };
    }();
    module.exports = MyObject 
})();

和一个看起来像这样的mocha测试文件:

(function(){
 var assert = require("assert");

    describe("actual test", function(){

        it("should start with count of zero", function(){
            var obj = require("../mochatest.js");   
            assert.equal(obj.count, 0);
        }); 
        it("should be able to increment counter", function(){
            var obj = require("../mochatest.js");   
            obj.count=1;
            assert.equal(obj.count, 1);
        }); 
        it("should start with count of zero", function(){
            var obj = require("../mochatest.js");   
            assert.equal(obj.count, 0);
        }); 
    });
})();

我的第三次测试失败了: AssertionError:1 == 0 因此感觉第二次测试中的obj与第三次测试中的obj相同。我希望它是一个新的。

我是否编写了类似单身人士的内容?为什么在第三次测试中count == 1?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我想,我想出来了。我改变了两个并得到了我期望的行为。

(function(){
    var MyObj = function(){
        var myCount= 0;
        return{
            count: myCount
        };
    }  // <= note no more ();
    module.exports =MyObj; 
})();

以及我设置测试的方式(在beforeEach之前只有一次)

(function(){
 var assert = require("assert");

    describe("actual test", function(){
        var obj;
        beforeEach(function(done){
            var MyObject = require("../mochatest.js");  
            obj = new MyObject();
            done();
        });
        it("should start with count of zero", function(){
            assert.equal(obj.count, 0);
        }); 
        it("should be able to increment counter", function(){
            obj.count=1;
            assert.equal(obj.count, 1);
        }); 
        it("should start with count of zero", function(){
            assert.equal(obj.count, 0);
        }); 
    });
})();