Javascript 将对象类型与Jasmine';用这种方法收集的数据

Javascript 将对象类型与Jasmine';用这种方法收集的数据,javascript,tdd,bdd,jasmine,Javascript,Tdd,Bdd,Jasmine,我刚刚开始使用Jasmine,所以请原谅新手的问题,但是使用来调用时是否可以测试对象类型 expect(object.method).toHaveBeenCalledWith(instanceof String); 我知道我可以这样做,但它检查的是返回值,而不是参数 expect(k instanceof namespace.Klass).toBeTruthy(); 被指控是间谍的一种手段。因此,您只能在spy上调用它们,如中所述: 我发现了一个更酷的机制,使用,因为我发现用手把论点分开对于

我刚刚开始使用Jasmine,所以请原谅新手的问题,但是使用
来调用
时是否可以测试对象类型

expect(object.method).toHaveBeenCalledWith(instanceof String);
我知道我可以这样做,但它检查的是返回值,而不是参数

expect(k instanceof namespace.Klass).toBeTruthy();

被指控是间谍的一种手段。因此,您只能在spy上调用它们,如中所述:


我发现了一个更酷的机制,使用,因为我发现用手把论点分开对于易读性来说是次优的

在咖啡脚本中:

obj = {}
obj.method = (arg1, arg2) ->

describe "callback", ->

   it "should be called with 'world' as second argument", ->
     spyOn(obj, 'method')
     obj.method('hello', 'world')
     expect(obj.method).toHaveBeenCalledWith(jasmine.any(String), 'world')

jasmine.any(函数)很方便,注意到它也可以在引用中工作。例如:
expect(obj.method).toHaveBeenCalledWith({done:jasmine.any(Function)})
。非常有用。在撰写本文时,Jasmine在使用
toHaveBeenCalledWith(…参数)
时不会检查
new String('world')
的相同实例。为了理解这一点的重要性。必须检查是否调用了回调函数,
jasmin.any(函数)
救了我的命,谢谢你,安德烈亚斯,你添加
.toBeTruthy()
有什么原因吗?这似乎是不必要的。@gwg
expect(foo)
没有匹配器是不可操作的;如果没有
toBeTruthy()
调用,该行将一事无成。请参阅以获取证据。这已过时<代码>对象方法.mostRecentCall
需要在Jasmine 2.0中变成。另外,如另一个答案中所述,使用
jasmine.any()
,更清晰、更可爱。最后,这个答案需要一段时间才能达到目的;基本上,除了
expect(obj.method.mostRecentCall.args[0]instanceof String).toBeTruthy()之外,您编写的所有内容实际上不需要解释你自己。
obj = {}
obj.method = (arg1, arg2) ->

describe "callback", ->

   it "should be called with 'world' as second argument", ->
     spyOn(obj, 'method')
     obj.method('hello', 'world')
     expect(obj.method).toHaveBeenCalledWith(jasmine.any(String), 'world')