我需要断言一个函数,该函数应返回常量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)
答案 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
。如果它是一个对象,但又不是完全相同的对象,则必须使用“深度”限定符。