javascript - responseTime 在 Mockjax 中不起作用

标签 javascript ajax casperjs mockjax

我需要模拟很长的响应时间。我的 Moockjax 正在运行——它提供了正确的模拟数据。但是我的 ajax 调用是在我加载页面的那一刻完成的,即使我将 responseTime 设置为 20 秒也是如此。

你有想法吗?

我将我的测试页面减少到最少,以排除其他潜在的错误来源:

<!DOCTYPE HTML>
<html>
<head>
    <script src="jquery.js"></script>
    <script src="../jquery.mockjax.js"></script>
    <title>MockJax Tests</title>
  </head>
<body>
    <h1>A MockJax test.</h1>
    <p>Take a look into the console.</p>
    <script>

        $.mockjax({
          url: "foo.html",
          responseTime: 20000,
          responseText: "Hi! I am mockjax."
        });

        $.ajax({
          async: false,
          url: 'foo.html',
          success:function(data){
            console.log(data);
          },
          error:function(data){
            console.log('It doesn’t work that way :(');
          }
        });

    </script>
</body>
</html>

我还使用 CasperJS 和 Mockjax(在 casper.evaluate 内部)编写了一个测试。那里也一样。

这是我的 CasperJS 代码

var casper = require("casper").create({
  verbose: true,
  logLevel: 'error',
  clientScripts: ["node_modules/jquery-mockjax/jquery.mockjax.js"]
});

casper.on('remote.message', function(msg) {
  this.echo('remote message caught: ' + msg);
})

casper.start('http://der-zyklop.de/', function() {
  this.evaluate(function () {

    $.mockjax({
      url: "/blog/feed",
      responseTime: 20000,
      responseText: "Hi! I am mockjax!"
    });

    $.ajax({
      async: false,
      url: '/blog/feed',
      success:function(data){
        console.log(data);
      },
      error:function(data){
        console.log('It doesn’t work that way :(');
      }
    });

  });
});

casper.run();

如果您安装了 CasperJS,您应该能够通过 npm install jquery-mockjax 然后 casperjs test.js 运行它。它在 20 秒内给我这个输出:

mockjax output

我还写了一篇关于它的博客文章here .

最佳答案

Mockjax 目前无法进行阻塞延迟。查看current code :

if ( requestSettings.async === false ) {
    // TODO: Blocking delay
    process();
} else {
    this.responseTimer = setTimeout(process, parseResponseTimeOpt(mockHandler.responseTime) || 50);
}

您需要指定 async: true 才能正常工作。当您这样做时,您将需要在 casper 上下文中等待,因为控制流将继续而无需等待结果。

casper.start(url, yourEvaluateFunction).wait(25000).run();

我认为,除了以某种方式执行忙等待之外,JavaScript 甚至可能出现阻塞延迟。但在此期间,其他所有内容也将保持不变(JavaScript 是单线程的),您不会从 busywait 中获得任何好处。

关于javascript - responseTime 在 Mockjax 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27124056/

相关文章:

javascript - 等待所有文件更新,然后下载它们

javascript - 将 CSS 样式应用于映射项

javascript - pdfkit 不加载 css 和 JavaScript

ruby-on-rails - 带有 Remotipart 的 Rails AJAX 上传表单

php - AJAX请求中的特殊字符

javascript - console.log 在 CasperJS 的 setTimeout 评估中不起作用

javascript - 将变量从 this.evaluate 传递给 casper.then

javascript - 提交之前隐藏部分然后恢复

javascript - 用casperjs点击按钮没有反应

php - 如何用 PHP 接收 XMLHttpRequest?