Jasmine - 测试对象中未定义的方法

时间:2012-06-07 13:37:42

标签: javascript jasmine

我有一个非常基本的问题。如何使用jasmine检查对象中是否定义了方法?到目前为止,我有:

expect(obj.method).not.toBeUndefined();

但该报告无益地说:

'Expected undefined not to be undefined.'

如果不知何故,它可以告诉我我在报告中寻找的财产的名称,那将是很棒的。

任何建议表示赞赏!

3 个答案:

答案 0 :(得分:4)

JS引擎在将obj.method传递给expect函数之前对其进行评估。因此,无法从匹配器中恢复字符串"method"

你应该write your own matcher将方法名称作为字符串类型的参数。

这样的东西
expect(obj).toHaveMethod("method");

答案 1 :(得分:0)

你可以使用类似的东西吗?

var validMethod = obj.hasOwnProperty('method') 
                  && typeof obj.method == 'function';

答案 2 :(得分:0)

也许你应该简单地做

 it("The 'toBeDefined' matcher compares against `undefined`", function() {
    var a = {
      foo: 'foo'
    };

    expect(a.foo).toBeDefined();
    expect(a.bar).not.toBeDefined();
  });