共享行為

有時你有多個類別或方法有類似的行為,而且你想要對所有這些測試這些行為,而不用編寫重複的規格。有許多方法可以做到這一點,這取決於你的需要。

內聯 describe/it 迴圈

使用內聯迴圈定義 describeit 區塊可以避免許多相同、簡單的測試重複執行。

describe('Element', function() {
  beforeEach(function() {
    this.subject = new Element();
  });

  ['x', 'y', 'width', 'height'].forEach(name => {
    describe(name, function() {
      it('returns a number', function() {
        expect(typeof this.subject[name]()).toBe('number');
      });
    });
  });
});

規格宣告助手

建立一個單獨的助手函式來宣告 describeit 區塊,允許你在多個測試中重複使用它。在描述共享行為時,這可能會很有用。

// Note that this function can exist outside any jasmine block, as long as you
// only call it from inside a jasmine block.
function itActsLikeAPet() {
  it('can be fed', function() {
    this.subject.feed();
    expect(this.subject.hungry()).toBe(false);
  });

  it('can be watered', function() {
    this.subject.drink();
    expect(this.subject.thirsty()).toBe(false);
  });
}

describe('Dog', function() {
  beforeEach(function() {
    this.subject = new Dog();
  });

  itActsLikeAPet();

  it('can bark', function() {
    this.subject.bark();
  });
});

describe('Cat', function() {
  beforeEach(function() {
    this.subject = new Cat();
  });

  itActsLikeAPet();

  it('can meow', function() {
    this.subject.meow();
  });
});

注意事項

在測試中共享行為可以是一個強大的工具,但請謹慎使用。