aja*_*est 4 javascript testing mocha.js chai karma-runner
我有以下情况,我必须检查URL是否正确构建提供一些查询参数.我不希望系统在呈现的URL中应用特定的顺序,所以我带来了以下测试用例,我希望它可以工作:
it('test that url is built correctly', function () {
var args = {
arg1: 'value1',
arg1: 'value2'
};
var rendered_url = render_url(args);
expect(rendered_url).to.equal('/my/url?arg1=value1&arg2=value2')
.or.to.equal('/my/url?arg2=value2&arg1=value1')
;
});
Run Code Online (Sandbox Code Playgroud)
我很惊讶or链条不存在,因为它使声明构建过程整洁和舒适.
我知道我可以通过多种方式解决这个问题(例如,使用satisfy),但我想知道:
你可以使用to.include或.match:
var chai = require("chai");
var expect = chai.expect;
var option1 = '/my/url?arg1=value1&arg2=value2';
var option2 = '/my/url?arg2=value2&arg1=value1';
var possible = [option1, option2];
var re = /^\/my\/url\?arg1=value1&arg2=value2|\/my\/url\?arg2=value2&arg1=value1$/;
it('1', function () {
var rendered_url = option1;
expect(possible).to.include(rendered_url);
expect(rendered_url).to.match(re);
});
it('2', function () {
var rendered_url = option2;
expect(possible).to.include(rendered_url);
expect(rendered_url).to.match(re);
});
it('3', function () {
var rendered_url = "foo";
expect(possible).to.include(rendered_url);
});
it('4', function () {
var rendered_url = "foo";
expect(rendered_url).to.match(re);
});
Run Code Online (Sandbox Code Playgroud)
前2个测试将通过,最后2个测试将失败.
我没有在这个例子做了但两者possible并re可以通过函数生成的,而不是手工编码的参数所有可能的排列.
我怀疑.orChai中没有的原因是它会使Chai的代码变得相当复杂,并且使得常规案例的使用变得更加麻烦.现在当.equal被叫时,它知道它是终端.如果Chai允许使用.or,则.equal无法立即知道它是否是终端.即使你有类似的东西expect(foo).to.equal(bar),呼叫equal也无法知道它是终端.你必须做一些类似于承诺库所做的事情来表示代码完成了一个承诺,并打电话说"我在这里完成"所以它看起来像expect(foo).to.equal(bar).end().我不是说这不可能,但它会产生广泛的影响.
| 归档时间: |
|
| 查看次数: |
1072 次 |
| 最近记录: |