Javascript 茉莉花
我是Jasmine新手,假设使用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
.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的错。这是语言的行为方式。