如何在mocha中编写测试用例

时间:2015-03-27 10:39:57

标签: javascript tdd mocha

我有这个代码,我试图使用摩卡测试(我很新)。

function ColorMark(){
    this.color = ""
    var that = this;

    this.create = function(color){
        that.color = color;
        console.log("Created a mark with " + that.color + " color");
    }
}

我所做的就是这个

describe('ColorMark', function(){
    describe('#create("red")', function(){
        it('should create red mark',function(){
            assert.equal(this.test.parent.ctx.color, "red");
        })
    })
});

错误:

AssertionError: "undefined" == "red"

that.color返回undefined

测试环境中this有什么问题?

我是否遗漏了与mocha特别相关的内容?

2 个答案:

答案 0 :(得分:1)

根据您显示的代码判断,它不会实例化ColorMark,也不会实际调用create('red'),您似乎认为Mocha实际上做的更多。您在describe的第一个参数中添加的内容主要用于您的权益。这些是测试套件标题。摩卡将它们传递给记者,记者们展示了它们,但就是这样。

以下是您可以这样做的方法:

var assert = require("assert");

function ColorMark(){
    this.color = "";
    var that = this;

    this.create = function(color){
        that.color = color;
        console.log("Created a mark with " + that.color + " color");
    };
}

describe('ColorMark', function(){
    describe('#create("red")', function(){
        it('should create red mark',function(){
            var cm = new ColorMark();
            cm.create("red");
            assert.equal(cm.color, "red");
        });
    });
});

答案 1 :(得分:0)

您需要设置一个beforeEach()子句来设置测试并执行ColorMark()函数。

来自文档: http://mochajs.org/

  beforeEach(function(done){
    db.clear(function(err){
      if (err) return done(err);
      db.save([tobi, loki, jane], done);
    });
  })

所以在这种情况下,它可能看起来像

function ColorMark(color){
    this.color = ""
    var that = this;

    this.create = function(color){
        that.color = color;
        console.log("Created a mark with " + that.color + " color");
    }
}

beforeEach(function(){
    ColorMark("red");
});

describe('#create("red")', function(){
    it('should create red mark',function(){
        assert.equal(this.test.parent.ctx.color, "red");
    })
})