是否在Jasmine测试用例中推荐了箭头功能?

时间:2016-08-12 09:55:39

标签: typescript jasmine karma-jasmine

根据mocha文档,不鼓励使用箭头功能。

https://mochajs.org/#arrow-functions

对于Jasmine来说,这是一样的吗?我在Jasmine文档中找不到关于该主题的任何指示。

1 个答案:

答案 0 :(得分:14)

有一篇非常有趣的文章你不应该错过:

这是一个引用:

  

The new, better way

     

对于每个测试(及其beforeEach / afterEach挂钩),jasmine设置   每个函数的接收者到最初为空的对象。这个   对象,在Jasmine的源代码中称为userContext,可以   分配给它的属性,并在每个结束时被吹走   测试。我们最近试图解决我们遇到的问题   切换到为此对象分配变量,而不是   在描述中声明它们然后分配它们。所以我们的   上面的原始代码现在看起来像这样:

describe('views.Card', function() {
  'use strict';

  beforeEach(function() {
    this.model = {};
    this.view = new CardView(this.model);
  });

  describe('.render', function() {
    beforeEach(function() {
      this.model.title = 'An Article';
      this.view.render();
    });

    it('creates a "cardTitle" h3 element set to the model\'s title', function() {
      expect(this.view.$el.find('.cardTitle')).toContainText(this.model.title);
    });

那么,这意味着什么呢?我们应该使用茉莉花的箭头功能吗?

答案应该是 - 在你的代码中保留箭头功能,除了这个组合

// could be arrow
describe("ListModel -", () =>
{
    // local context description
    interface IMyTestContext
    {
        items?: Heroe[];
        ...
    }
    // could be arrow
    describe("Test items ", () =>
    {
        // NOT AN ARROW - profit from Jasmine context passed as 'this'
        beforeEach(function()
        {
            var ctx: IMyTestContext = this.TestContext = {}; 
            // TODO do some defaults with context
            ...
        });

        // NOT AN ARROW - profit from Jasmine context passed as 'this'
        it("should ...", function()
        {
            var ctx: IMyTestContext = this.TestContext;
            // TODO ... test expecations
        ...

所以, beforeEach() it() 使用箭头 - 从以上表示的Jasmine上下文中获利强> this

我们还可以引入全球通话 beforeEach

import * as something from "...";

beforeEach(function()
{
    this.TestContext = {};
});

现在上下文总是存在,所以我们不必重新创建它:

describe("Track Changed items ", () =>
{
    // NOT AN ARROW - profit from Jasmine context passed as 'this'
    beforeEach(function()
    {                                              // created by global beforeEach above
        var ctx: IMyTestContext = this.TestContext;//  = {}; 
  

是的,这真是太神奇了,如果一个测试运行器会找到一些全局beforeEach ......它也会在每次测试之前运行它......太棒了,不是吗?