gpt4 book ai didi

javascript - 使用 mocha 和 chai 的 bool 析取 (OR)

转载 作者:搜寻专家 更新时间:2023-11-01 05:22:39 27 4
gpt4 key购买 nike

我有以下场景,我必须检查 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')
;
});

我对 or 链不存在感到非常惊讶,因为它使语句构建过程整洁舒适。

我知道我可以通过多种方式解决这个问题(例如,使用 satisfy),但我想知道:

  • 我是否无法在文档中找到以类似方式实现我想要的模式(我已通读)...
  • ...或者是否有充分的理由不将此结构包含在 chai...
  • ...或者是否存在实现与示例中的构造类似的构造的替代方法(调整、其他框架等)

最佳答案

您可以使用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);
});

前 2 个测试将通过,后 2 个将失败。

我没有在这个例子中这样做,但是 possiblere 都可以由函数生成,而不是手动编码所有可能的参数排列。

我怀疑 .or 不在 Chai 中的原因是它会使 Chai 的代码变得相当复杂,并使其在常规情况下使用起来更加麻烦。现在,当 .equal 被调用时,它知道它是终端。如果 Chai 允许使用 .or,那么 .equal 无法立即知道它是否是终端。即使您有类似 expect(foo).to.equal(bar) 的调用,对 equal 的调用也无法知道它是终止的。您必须像一些 promises 库那样做一些事情来表示代码已完成 promise 并打电话说“我在这里完成了”所以它看起来像 expect(foo).to。等于(条)。结束()。我并不是说这不可能,但它会产生广泛的影响。

关于javascript - 使用 mocha 和 chai 的 bool 析取 (OR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com