来自茉莉花文档(http://jasmine.github.io/2.0/introduction.html):
此关键字
在beforeEach,it和afterEach之间共享变量的另一种方法是通过this关键字。每个规格的beforeEach / it / afterEach都将此作为>同一个空对象,为下一个规范的beforeEach / it / afterEach设置为空。
我在Javascript中对此的理解是,这与实际函数的范围有关。所以我希望它会在beforeEach / it / afterEach中绑定到上下文不同的上下文(取决于函数的上下文)。
e.g。
describe('Spec', function (){
var eachThis = null;
beforeEach(function(){
eachThis = this;
});
it('check this', function(){
except(this).toEqual(eachThis);
}
};
所以这个测试应该通过。
茉莉花改变了这种行为还是我弄错了?
答案 0 :(得分:3)
我认为你的例子可能有一些问题,但你认为茉莉在使用this
,beforeEach
等时操纵beforeAll
引用是正确的。
以下是一个说明性示例 - 请注意,下面列出的所有预期都将通过:
(function() {
describe("without beforeEach", function () {
(function() {
// this is not inside of a beforeEach call
this.dog = "Spot";
alert(this.dog);
})();
it("should not have access to a dog property from `this`", function () {
expect(this.dog).toBeUndefined(); // because there is no `dog` member of the object currently referenced by `this`
});
});
describe("a beforeEach test", function () {
beforeEach(function () {
this.dog = "Spot";
});
it("should work now because we used `beforeEach`", function () {
expect(this.dog).toEqual("Spot");
});
});
})();
一般来说,你对这个'在函数范围内定义是正确的,但是jasmine中的这个实现演示了如何提供一个特定的对象来引用这个'这个'关键字,如果你想。在javascript中执行此操作的典型方法是使用Function.prototype.apply()
,它允许您传入this
引用的任意对象作为函数的第一个参数。
答案 1 :(得分:0)
所以这个测试应该通过。
是的,确实如此。
茉莉花是否改变了这个
的行为
看起来不像。
我做错了什么
您的代码中存在语法错误和拼写错误(例如except
- > expect
)。
此外,toEqual
不会测试对象的身份,因此即使expect(this).toEqual({});
也会通过。 toBe
是一种更好的方法。