javascript 在Jasmine中测试空对象失败

hrysbysz  于 2023-04-04  发布在  Java
关注(0)|答案(5)|浏览(124)

如果我有一个变量设置为{},则会出现以下匹配错误

// Somewhere in my angular controller
self = this;
self.myVar = {};

// In my test file
// This errors out. I console.log myVar to make sure that it is indeed {}
expect(myVar).toEqual({});

// Note if I define myVar = {} in the same test spec it works
it('test', function(){
   var myVar = {};
   expect(myCtrl.myVar).toEqual({});
   expect({}).toEqual({});
});

这是什么原因,你会如何通过通过这种行为?根据茉莉博士

it("should work for objects", function() {
  var foo = {
    a: 12,
    b: 34
  };
  var bar = {
    a: 12,
    b: 34
  };
  expect(foo).toEqual(bar);

似乎toEqual应该测试对象内容?

l0oc07j2

l0oc07j21#

尝试:expect(result).toMatchObject({})

pexxcrt2

pexxcrt22#

您可以尝试使用与要计算的对象中存在的对象键相关联的length属性:

expect(Object.keys(res).length).toBe(0); // or not.toBeGreaterThan(0)

如果你正在计算一个非空的对象,你可以用途:

expect((Object.keys(res)).length).toBeGreaterThan(0) // or not.toBe(0)
qmelpv7a

qmelpv7a3#

我认为你的变量超出了app的作用域,在测试用例中,它作为undefined var被执行

rvpgvaaj

rvpgvaaj4#

var empty = jasmine.empty();
expect(empty.asymmetricMatch(myvar));

=〉Code / Doc

vwkv1x7d

vwkv1x7d5#

有两种解决方案:
使用toMatchObject({})
或者尝试使用jest-extended中的toBeEmpty()。

  • 首先,安装jest-extended:
npm install --save-dev jest-extended

然后像jest中的其他匹配器一样在测试中使用它:

expect(result).toBeEmpty()

相关问题