Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 茉莉花_Javascript_Jasmine - Fatal编程技术网

Javascript 茉莉花

Javascript 茉莉花,javascript,jasmine,Javascript,Jasmine,我是Jasmine新手,假设使用.not.toBeDefined()或.toBeUndefined()匹配您可以检查变量是否未定义: describe('toBeDefined', function() { it('should be defined', function() { var obj = {}; expect(obj).toBeDefined(); // Passes }); it('should not be define

我是Jasmine新手,假设使用
.not.toBeDefined()
.toBeUndefined()
匹配您可以检查变量是否
未定义

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
    });

});
我完全明白这会在代码中失败,但我假设使用这些匹配不会。我只是用错了,还是不可能编写一个规范来检查某些东西是否
未定义?

问题在于

  expect(obj).toBeUndefined();
在呼叫Jasmine之前失败。引用未定义的变量是错误的(在新浏览器中或至少在“严格”模式下)

请尝试此设置:

it('should not be defined using .tobeUnefined()', function() {
    var obj = {};
    expect(obj.not_defined).toBeUndefined(); 
});
在该代码中,有一个变量“obj”,其值为空对象。在JavaScript中引用一个不存在的对象属性是可以的,因为这样的引用会导致
未定义
,所以测试将通过。另一种方法是:

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

  expect(no_value).toBeUndefined();
});

请注意,您的错误表示未定义
obj

它并没有说obj是未定义的

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

默认情况下,任何未赋值的已声明变量都会被赋予一个未定义的值,但必须声明该变量

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

如果你申报

var obj;
然后,
obj
将测试为未定义


如果不声明
obj
,则Jasmine matcher无法与未定义的数据类型进行比较。

对。谢谢你的洞察力。:)您也可以这样做:
expect(typeof obj).toBe('undefined')
谢谢,现在我可以让它工作了:description(“一个女孩”,function(){it(“没有名字)”,function(){expect({}.arya.toBeUndefined();});此错误由ecmasceipt引擎确定,由于您正在访问未定义的变量,该引擎自然会抛出错误。这完全是意料之中的事,因为这不是Jasmine的错。这是语言的行为方式。