使用Mocha和Chai断言RegExp

时间:2018-01-17 09:31:17

标签: javascript mocha chai assertions

我需要断言一个函数,该函数应返回常量RegExp,其中模式和修饰符是固定的。如何用Mocha做到这一点?

考虑到这样的测试代码:

var expect = require("chai").expect;

describe("myRegExp() function", function () {
    it("returns constant pattern", function () {

        expect(myRegExp()).to.equal(/somePattern/i);

    });
});

var myRegExp = function(){
    return /somePattern/i;
}

我们得到一个AssertionError:

AssertionError: expected /somePattern/i to equal /somePattern/i
    at Context.<anonymous> (test/stackSnippetTest.js:6:31) 

2 个答案:

答案 0 :(得分:0)

RegExp可以转换为String。请参阅Edwin评论,RegExp docs以及此处converting RegExp to String then back to RegExp

解决方案是使用RegExp.toString():

var expect = require("chai").expect;

describe("myRegExp() function", function () {
    it("returns constant pattern", function () {

        expect(myRegExp().toString()).to.equal(/somePattern/i.toString());

    });
});

var myRegExp = function(){
    return /somePattern/i;
}

效果很好。或者,断言RegExp.source和RegExp.flags:

    expect(myRegExp().source).to.equal(/somePattern/i.source);
    expect(myRegExp().flags).to.equal(/somePattern/i.flags);

答案 1 :(得分:0)

it("Compare Complex Objects", () => {
  let regex1 = /somePattern/i;
  let regex2 = /somePattern/i;
  assert.deepEqual(regex1, regex2);
  expect(regex1).to.deep.equal(regex2);
});

Deep Equals是宽松的相等,而assert.equal是严格的相等。类似于比较两个日期,或比较字符串"42"和数字42。如果它是一个对象,但又不是完全相同的对象,则必须使用“深度”限定符。