javascript - Mocha 测试用 .then stub 了 ajax 调用

标签 javascript ajax testing mocha.js sinon

我有一个 jquery ajax 调用,看起来像这样:

$.ajax({
  type: "GET",
  dataType: 'json',
  data: data,
  url: url
}).then((data, successFlag, xhr) => {
  this.props.someFunc(data)
})

在我的测试文件中,我用 sinon 删除了 jquery ajax 调用,它返回了一个已解决的 promise 数据:

sinon.stub($, 'ajax')
  .returns(Promise.resolve({ data: 'test data' }))

而且我也在监视我的 someFunc(data) 函数。在我的测试中,我正在调用一个进行 ajax 调用的函数,然后期望我的 someFunc(data) 被调用。然而,期望失败了,但是当我在我的 someFunc(data) 函数中放置一个控制台日志时,我可以看到它显然被调用了:

component.instance().makeAjaxCall()
expect($.ajax.calledOnce).to.be.true // passes
expect(someFuncSpy.calledOnce).to.be.true // fails

现在我假设它失败了,因为它在 then .then 执行之前检查期望,我尝试查找一些处理 promises 测试的解决方案,但到目前为止我没有尝试过(或者我实现错误)。如何确保 .then 在我检查期望值之前完成执行?

最佳答案

调用 stub 方法后使用done()

it('should make an ajax call', function(done) {
    sinon.stub($, 'ajax').returns(Promise.resolve({ data: 'test data' }))
    component.instance().makeAjaxCall()
    expect($.ajax.calledOnce).to.be.true;
    done(); // let Mocha know we're done async testing

    expect(someFuncSpy.calledOnce).to.be.true;
});

Note: Please pass done as argument in function -- it('', function(done) {})

Source

关于javascript - Mocha 测试用 .then stub 了 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864385/

相关文章:

javascript - Uncaught ReferenceError : id is not defined at HTMLButtonElement. onclick

java - 将testNG xml文件放在ANT java web项目中的什么地方

javascript - 如何停止窗口卸载?

javascript - 单击时将数组项移动到另一个数组

javascript - 我无法解决这个 "parsererror"ajax 错误

javascript - 困惑: Ajax Framework vs JavaScript Framework?

javascript - Jquery Toggle 在 IE/Chrome 中工作,在 FF 中未定义

javascript - d3.min.js :1 Uncaught TypeError: n. getFullYear 不是函数

c# - Assert.True 未通过测试

android - Q : How to run single test in multiple devices?