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

时间:2017-06-16 09:06:11

标签: angular jasmine karma-jasmine angular-cli

这是一个普遍的问题。

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

它看起来像这样:

it('should create', () => {
 expect(component).toBeTruthy();
});

如何检查它的真实性和未定义?有什么区别?

提前致谢:)

1 个答案:

答案 0 :(得分:5)

真实的源代码:

getJasmineRequireObj().toBeTruthy = function() {

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

  return toBeTruthy;
};

定义的源代码:

getJasmineRequireObj().toBeDefined = function() {
  function toBeDefined() {
    return {
      compare: function(actual) {
        return {
          pass: (void 0 !== actual)
        };
      }
    };
  }

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

因此,它是!!actualvoid 0 !== actual之间的比较。

void 0undefined AFAIK相同,虽然它们实际上是相同的,toBeDefined是检查某些边缘情况下定义值的更安全的方法。

例如:

expect(0).toBeTruthy()将评估为false / fail

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

评论中提及的@trichetriche中有更多这些案例。

但是对于你的情况,它不会有所作为。