根据mocha文档,不鼓励使用箭头功能。
https://mochajs.org/#arrow-functions
对于Jasmine来说,这是一样的吗?我在Jasmine文档中找不到关于该主题的任何指示。
答案 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
......它也会在每次测试之前运行它......太棒了,不是吗?