gpt4 book ai didi

没有括号的 Javascript 向后感知链接,例如期望(x).not.toBe()

转载 作者:行者123 更新时间:2023-11-29 22:12:29 27 4
gpt4 key购买 nike

今天我想用与 Jasmine 类似的方式进行链接:http://pivotal.github.io/jasmine/

Jasmine 具有非常流畅的编写条件测试的风格,例如:

expect(result).not.toBe(85);

在我的测试中,我只是想添加一个 作为一些糖衣来做类似的事情:

createRegion('test').and.append()

所以这很简单(我知道以下内容在 IE8< 中不起作用):

Layout.prototype.__defineGetter__('and', function() {
return this;
});

但这让我对 Jasmine 的样子产生了兴趣:

  • 在找不到 defineProperty (IE8<) 或 __defineGetter__ 的任何实例时执行无括号链接
  • 找不到它定义的地方 not
  • 尝试想象链接在 not 之后的方法是如何知道它的 - 我假设一个变量设置为 reverse = truenot 方法,以便后续方法知道要反转它的结果?

您将如何实现此类行为,或者您知道 jasmine 是如何做到的吗?

最佳答案

我查看了源代码,以及 expect 的实现:

jasmine.Spec.prototype.expect = function(actual) {
var positive = new (this.getMatchersClass_())(this.env, actual, this);
positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
return positive;
};

所以,属性not是同一个类的实现,接收这个额外的参数来反转输出:

jasmine.Matchers = function(env, actual, spec, opt_isNot) {
this.env = env;
this.actual = actual;
this.spec = spec;
this.isNot = opt_isNot || false; // reverse option set
this.reportWasCalled_ = false;
};

最后,在 jasmine.Matchers.matcherFn_ 中,它使用它来反转结果:

if (this.isNot) {
result = !result;
}

关于没有括号的 Javascript 向后感知链接,例如期望(x).not.toBe(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370930/

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