【问题标题】:How to test spy in setTimeout using jasmine?如何使用茉莉花在 setTimeout 中测试间谍?
【发布时间】:2016-06-13 15:10:47
【问题描述】:

我有这样的代码:

it('should call json-rpc', function() {
    var spy = spyOn(object, 'echo');
    if (spy.andCallThrough) {
        spy.andCallThrough();
    } else {
        spy.and.callThrough();
    }
    enter(term, 'echo foo bar');
    setTimeout(function() {
        // here I've got error Expected a spy, but got Function.
        expect(object.echo).toHaveBeenCalledWith('foo', 'bar');
        term.destroy().remove();
    }, 200);
});

并且我得到了 object.echo 不是间谍而是函数的错误,我如何检查函数是否在 setTimeout 中被调用?

编辑:我试过用这个:

if (jasmine.Clock) {
    jasmine.Clock.useMock();
} else {
    jasmine.clock().install();
}

if (jasmine.Clock) {
    jasmine.Clock.tick(200);
} else {
    jasmine.clock().tick(200);
}
expect(object.echo).toHaveBeenCalledWith('foo', 'bar');

但这也行不通。我有错误

Expected spy echo to have been called with [ 'foo', 'bar' ] but it was never called.  

【问题讨论】:

  • 我认为期望应该只是在您的间谍的局部变量上,您将其称为间谍:expect(spy).toHaveBeenCalledWith。你试过吗?
  • @hightempo 是的,它可以工作,您可以将其添加为答案。

标签: javascript jasmine


【解决方案1】:

预期应该是间谍的本地 JavaScript 局部变量实例。所以在你的情况下你应该使用:

expect(spy).toHaveBeenCalledWith

【讨论】:

  • toHaveBeenCalledWith..你不应该打电话给匹配器吗?
  • @alecxe - 是的,我只是发布了部分代码——@jcubic 必须更改才能使其工作的部分。整行是expect(spy).toHaveBeenCalledWith('foo', 'bar');
  • 一些建议,考虑使用 $timeout 并在其上调用 flush 以反对 setTimeout。您还可以添加一个 afterEach() 函数来执行诸如拆除之类的操作: term.destroy().remove();
【解决方案2】:

我认为您还必须告诉 jasmine 测试是在 setTimeout 之后完成的。例如。对于 jasmine 2.0 类似这样的东西(请参阅 jasmine 1.3 和更多的链接)

你可以使用done,测试回调:

it('should call json-rpc', function(done) {
    var spy = spyOn(object, 'echo');
    if (spy.andCallThrough) {
        spy.andCallThrough();
    } else {
        spy.and.callThrough();
    }
    enter(term, 'echo foo bar');
    setTimeout(function() {
        // here I've got error Expected a spy, but got Function.
        expect(object.echo).toHaveBeenCalledWith('foo', 'bar');
        term.destroy().remove();
        done();
    }, 200);
});

在这里拍摄:https://stackoverflow.com/a/10955536/5272567

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2014-01-25
    • 2012-08-15
    • 2012-06-12
    相关资源
    最近更新 更多