2016-11-21 76 views
0

我想了解如何在使用Jasmine的Typescript中使用Spies。我发现this documentation and this example使用Jasmine在Typescript中了解间谍

describe("A spy", function() { 
    var foo, bar = null; 

    beforeEach(function() { 
    foo = { 
     setBar: function(value) { 
     bar = value; 
     } 
    }; 

    spyOn(foo, 'setBar').and.callThrough(); 
    }); 

    it("can call through and then stub in the same spec", function() { 
    foo.setBar(123); 
    expect(bar).toEqual(123); 

    foo.setBar.and.stub(); 
    bar = null; 

    foo.setBar(123); 
    expect(bar).toBe(null); 
    }); 
}); 

为了使用间谍我创建了一个方法:

export class HelloClass { 
    hello() { 
     return "hello"; 
    } 
} 

,我试图窥探它:

import { HelloClass } from '../src/helloClass'; 

describe("hc", function() { 
    var hc = new HelloClass(); 

    beforeEach(function() { 
    spyOn(hc, "hello").and.throwError("quux"); 
    }); 

    it("throws the value", function() { 
    expect(function() { 
     hc.hello 
    }).toThrowError("quux"); 
    }); 
}); 

,但它会导致:

[17:37:31] Starting 'compile'... 
[17:37:31] Compiling TypeScript files using tsc version 2.0.6 
[17:37:33] Finished 'compile' after 1.9 s 
[17:37:33] Starting 'test'... 
F....... 
Failures: 
1) Calculator throws the value 
1.1) Expected function to throw an Error. 

8 specs, 1 failure 
Finished in 0 seconds 
[17:37:33] 'test' errored after 29 ms 
[17:37:33] Error in plugin 'gulp-jasmine' 
Message: 
    Tests failed 

回答

0

你实际上从来没有调用hc.hello,因此它永远不会投掷。

试试这个作为测试:

it("throws the value", function() { 
    expect(hc.hello).toThrowError("quux"); 
}); 

这是怎么回事是expect(...).toThrowError期待的是,在被调用时,会抛出异常的函数。我确信你知道这一点,但是刚刚陷入了这个事实,那就是你在功能上留下了遗物。