首页 > 解决方案 > Jasmine JS 理解全局上下文

问题描述

我有一个关于 Jasmine 如何实际处理全局上下文的问题。在 api 文档中,类似的方法beforeEach(),afterEach(), etc被描述为全局。因此,在.Jasmine 识别它们时,它们在没有运算符的情况下被调用。

我有以下简单的课程:

export class VoteComponent { 
  totalVotes = 0; 

  upVote() { 
    this.totalVotes++;
  }

  downVote() { 
    this.totalVotes--;
  }
}

并测试以下规范,它工作正常:

import { VoteComponent } from './vote.component';

describe('VoteComponent', () => {
  let Votes :VoteComponent;
 beforeEach(()=>{
       Votes = new VoteComponent();
 })
  it('Upvotes', () => {
        Votes.upVote();
        expect(Votes.totalVotes).toBe(1);
  });

  it('Downvotes', () => {
        Votes.downVote();
        expect(Votes.totalVotes).toBe(-1);
  });
});

但是,如果我将规范更改为如下所示:

 // let Votes :VoteComponent;
 beforeEach(()=>{
       let Votes = new VoteComponent();
 })

我收到以下错误:

Chrome 67.0.3396 (Windows 10.0.0) VoteComponent Upvotes FAILED ReferenceError: Votes is not defined

我不明白这是为什么。beforeEach() 是一个全局上下文函数,在每个规范之前被调用。但即便如此,Votes除非在 beforeEach() 之外实例化,否则在规范中也无法识别。

为什么是这样?我正在使用 Angular-6、Karma 1.7 和 Jasmine 2.9

标签: angularkarma-jasmine

解决方案


推荐阅读