Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 茉莉花测试对象是否有某种方法_Javascript_Coffeescript_Jasmine - Fatal编程技术网

Javascript 茉莉花测试对象是否有某种方法

Javascript 茉莉花测试对象是否有某种方法,javascript,coffeescript,jasmine,Javascript,Coffeescript,Jasmine,我正在使用Jasmine,我想测试一个对象是否有特定的方法,如下所示: it "should have 'open' method", -> @xhr = ajax.create() expect(@xhr).toHaveMethod "open" # I want to test like this! 我怎样才能测试?谢谢你的好意。我想试试: it "should have 'open' method", -> @xhr = ajax.create()

我正在使用Jasmine,我想测试一个对象是否有特定的方法,如下所示:

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(@xhr).toHaveMethod "open" # I want to test like this!
我怎样才能测试?谢谢你的好意。

我想试试:

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(@xhr.open).toBeDefined()

请看此图。

没有内置的方法,但您可以通过这样做来实现所需的结果

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(typeof @xhr.open).toBe("function")
请注意,如果测试被定义为在另一个答案中提出的,那么它将通过一些边缘情况,而不应该通过。如果采用以下结构,它将通过,并且它肯定不是一个函数

{ open : 1 }

@大卫答对了
tobedefine()
可能就是您想要的。但是,如果要验证它是函数而不是属性,则可以将
toEqual()
jasmine.any(函数)
一起使用。下面是一个示例:

我尝试了这个解决方案,它很有效:

spyOn(@xhr,"open")

如果没有函数打开,它将抛出错误,因为它无法在它上启动间谍程序

Jasmine允许您编写自己的“匹配程序”。文档对此进行了解释。

您可以编写一个非常特定的匹配器,名为

expect(obj).toHaveMethod("methodName");
就我个人而言,我会写一些更通用的东西来检查值类型。这样,我不仅可以使用它来检查是否在和对象/实例上定义了方法,还可以检查任何可以存储值的东西。它还允许我检查函数类型以外的类型

expect(obj.methodName).toBeA(Function);
要使其工作,您必须确保添加toBeA“matcher”


我是这样做的。角度示例:

beforeEach(inject(function ($injector) {
    service = $injector.get("myService");       
}));

it("should have myfunction function", function () {
    expect(angular.isFunction(service.myfunction)).toBe(true);
});

此解决方案的问题是,如果预期失败,则消息将类似于
预期未定义为function
,这并没有多大帮助。类似于
期望对象'@xhr'具有属性'open'
会更好。什么是“角度”?
beforeEach(inject(function ($injector) {
    service = $injector.get("myService");       
}));

it("should have myfunction function", function () {
    expect(angular.isFunction(service.myfunction)).toBe(true);
});