为什么期望组件真实而不是定义

met*_*ard 5 jasmine karma-jasmine angular-cli angular

这是一个普遍的问题。

当使用Angular-cli架设组件时,它会自行创建第一个测试。

看起来像这样:

it('should create', () => {
 expect(component).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

它如何检查它是否真实且未定义?有什么区别?

提前致谢 :)

eko*_*eko 8

真实的源代码:

getJasmineRequireObj().toBeTruthy = function() {

  function toBeTruthy() {
    return {
      compare: function(actual) {
        return {
          pass: !!actual
        };
      }
    };
  }

  return toBeTruthy;
};
Run Code Online (Sandbox Code Playgroud)

定义的源代码:

getJasmineRequireObj().toBeDefined = function() {
  function toBeDefined() {
    return {
      compare: function(actual) {
        return {
          pass: (void 0 !== actual)
        };
      }
    };
  }
Run Code Online (Sandbox Code Playgroud)

https://github.com/jasmine/jasmine/blob/4097718b6682f643833f5435b63e4f590f22919f/lib/jasmine-core/jasmine.js#L2908

因此,这是!!actual和之间的比较void 0 !== actual

void 0undefinedAFAIK 相同,对我来说虽然实际上是相同的,但它toBeDefined是一种在某些边缘情况下检查定义值的更安全的方法。

例如:

expect(0).toBeTruthy() 将评估为假/失败

expect(0).toBeDefined() 将评估为真/成功

评论中提到的@trichetriche案例更多。

但是,对于您而言,这不会有任何不同。