我是Jasmine的新手,刚刚开始使用它。我有一个库js文件,其中包含许多未与任何对象关联(即是全局的)的函数。我该如何监视这些功能?
我尝试使用window / document作为对象,但是即使调用了该函数,间谍也无法正常工作。我还尝试将其包装在伪造的对象中,如下所示:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
并测试
expect(fakeElement.fakeMethod).toHaveBeenCalled();
这也不起作用,因为间谍不起作用
如果要定义功能:
function test() {};
然后,这等效于:
window.test = function() {} /* (in the browser) */
所以spyOn(window, 'test')
应该工作。
如果不是这样,您还应该能够:
test = jasmine.createSpy();
如果这些都不起作用,则说明您的设置还有其他问题。
我不认为您的fakeElement
技术有效是因为幕后情况。原始的globalMethod仍然指向相同的代码。间谍所做的是代理它,但仅在对象的上下文中。如果您可以让测试代码通过fakeElement进行调用,那么它将可以工作,但是您可以放弃全局fns。
TypeScript用户:
我知道OP问有关javascript的问题,但是对于遇到这个想要监视导入函数的TypeScript用户,您可以执行以下操作。
在测试文件中,从此转换函数的导入:
import {foo} from '../foo_functions';
x = foo(y);
对此:
import * as FooFunctions from '../foo_functions';
x = FooFunctions.foo(y);
然后,您可以监视FooFunctions.foo
:)
spyOn(FooFunctions, 'foo').and.callFake(...);
// ...
expect(FooFunctions.foo).toHaveBeenCalled();
我使用2种替代品(用于茉莉2)
该函数不是很明确,因为它似乎实际上是伪函数。
test = createSpy().and.callFake(test);
第二个更详细,更明确和“更简洁”:
test = createSpy('testSpy', test).and.callThrough();
->茉莉花源代码看第二个参数
一个非常简单的方法:
import * as myFunctionContainer from 'whatever-lib';
const fooSpy = spyOn(myFunctionContainer, 'myFunc');
import * as saveAsFunctions from 'file-saver';
..........
.......
let saveAs;
beforeEach(() => {
saveAs = jasmine.createSpy('saveAs');
})
it('should generate the excel on sample request details page', () => {
spyOn(saveAsFunctions, 'saveAs').and.callFake(saveAs);
expect(saveAsFunctions.saveAs).toHaveBeenCalled();
})
这对我有用。
我的答案与@FlavorScape略有不同,因为我在导入的模块中有一个(默认导出)功能,我做了以下工作:
import * as functionToTest from 'whatever-lib';
const fooSpy = spyOn(functionToTest, 'default');
本文地址:http://javascript.askforanswer.com/shiyongjasminejianshimeiyouduixiangdehanshu.html
文章标签:jasmine , javascript , unit-testing
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
文章标签:jasmine , javascript , unit-testing
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!