29

我是 Jasmine 的新手,假设使用.not.toBeDefined()or.toBeUndefined()匹配项可以检查变量是否为undefined

describe('toBeDefined', function() {

    it('should be defined', function() {
        var obj = {};
        expect(obj).toBeDefined(); // Passes
    });

    it('should not be defined using .not.tobeDefined()', function() {
        //var obj = {};
        expect(obj).not.toBeDefined(); // Fails // ReferenceError: obj is not defined
    });

    it('should not be defined using .tobeUnefined()', function() {
        //var obj = {};
        expect(obj).toBeUndefined(); // Fails // ReferenceError: obj is not defined
    });

});

我完全明白这会在代码中失败,但我假设使用这些匹配项不会。我只是使用了这些错误,还是无法编写规范来检查是否有问题undefined

4

2 回答 2

43

问题是

  expect(obj).toBeUndefined();

在调用 Jasmine 之前就失败了。引用未定义的变量是错误的(至少在新浏览器或“严格”模式下)。

试试这个设置:

it('should not be defined using .tobeUnefined()', function() {
    var obj = {};
    expect(obj.not_defined).toBeUndefined(); 
});

在该代码中,有一个变量“obj”,其值为空对象。在 JavaScript 中引用对象的不存在属性是可以的,因为这样的引用结果在undefined测试中会通过。另一种方法是:

it('should not be defined using .tobeUnefined()', function() {
  var no_value;

  expect(no_value).toBeUndefined();
});
于 2013-02-03T19:22:27.393 回答
4

请注意,您的错误表明obj is not defined.

它并没有说 obj 是undefined

undefined实际上是 Javascript 中的一种数据类型。

默认情况下,任何没有赋值的声明变量都会被赋予undefined值,但必须声明该变量。

因此,当 Jasmine 测试一个值是否未定义时,它是在确定是否obj === undefined

如果你声明

var obj;

然后obj将测试为未定义。

如果您不声明obj,那么 Jasmine 匹配器将无法与undefined的数据类型进行比较。

于 2016-02-23T22:00:09.047 回答