Angularjs 检查函数是否成功执行jasmine

Angularjs 检查函数是否成功执行jasmine,angularjs,jasmine,Angularjs,Jasmine,我正在尝试使用jasmine编写单元测试用例。我有一个场景,我将数据传递给具有不同属性的函数,我只想检查该函数是否成功执行或没有任何错误。我尝试了expect(foo).tohavebeencall(),但它需要的是间谍而不是函数。请建议在此场景中编写测试用例预期的任何方法。toHaveBeenCalled()只能与spy一起使用 在您的方法上创建一个spy,然后尝试此操作 spyOn(obj, 'foo'); obj.foo(); // call foo() expect(obj.foo).

我正在尝试使用jasmine编写单元测试用例。我有一个场景,我将数据传递给具有不同属性的函数,我只想检查该函数是否成功执行或没有任何错误。我尝试了
expect(foo).tohavebeencall()
,但它需要的是间谍而不是函数。请建议在此场景中编写测试用例预期的任何方法。

toHaveBeenCalled()
只能与
spy
一起使用

在您的方法上创建一个
spy
,然后尝试此操作

spyOn(obj, 'foo');
obj.foo();  // call foo()
expect(obj.foo).toHaveBeenCalled()

你到底想测试什么

  • 测试
    foo
    是否正常工作。在这种情况下,只需从测试中调用
    foo()
    。如果抛出,测试将失败

  • 测试其他一些函数
    bar
    是否正常工作,其中“正确”表示它应该调用
    foo
    。在这种情况下,为
    foo
    创建一个spy,并在spy上使用
    toHaveBeenCalled()
    。这可能需要重新构造代码,以便以某种方式将
    foo
    spy注入
    bar


  • 从你的描述来看,似乎你想同时进行这两项测试,这与单元测试的原则背道而驰:你一次测试一件事。

    什么是
    obj
    wrt原始问题?而且,这个测试没有什么意义
    obj.foo
    显然已经被调用到断言上面的那行:)原谅我。与angularjs相比,这是非常有w.r.t角度的。我觉得是一样的。