19

我开始熟悉 Jasmine ( http://pivotal.github.com/jasmine/ ) 并发现一些相当莫名其妙的东西:

it("should be able to send a Ghost Request", function() {
  var api = fm.api_wrapper;

  api.sendGhostRequest(function(response) {
    console.dir('server says: ', response);
  });

  expect(true).toEqual(false);
});

按预期失败。

但是,在回调中移动期望调用:

it("should be able to send a Ghost Request", function() {
  var api = fm.api_wrapper;

  api.sendGhostRequest(function(response) {
    console.dir('server says: ', response);
    expect(true).toEqual(false);
  });
});

不知何故通过:O

经过一番调试: api.sendGhostRequest() 做了一个异步ajax请求,在请求完成之前jasmine就冲过去了。

因此问题是:

在确定测试结果之前,如何让 jasmine 等待 ajax 执行?

4

3 回答 3

15

茉莉花 2 编辑

在 Jasmine 2 中,异步测试变得更加简单。任何需要处理异步代码的测试都可以使用回调来编写,这将指示测试的完成。请参阅标题异步支持下的Jasmine 2 文档

it('should be able to send a ghost request', (done) => {
    api.sendGhostRequest((response) => {
        console.log(`Server says ${response}`);
        expect(true).toEqual(false);
        done();
    });
});

茉莉花 1

查看Jasmine 站点Asynchronous Support标题下的waitsFor()runs()

使用运行和等待应该强制 Jasmine 等待 ajax 调用完成或超时。

代码如下所示:

it("should be able to send a Ghost Request", function() {
    runs(function() {
        api.sendGhostRequest(function(response) {
            console.dir('server says: ', response);
            flag = true;
        });
    }, 500);

    waitsFor(function() {
        return flag;
    }, "Flag should be set", 750);

    runs(function() {
        expect(true).toEqual(false);
    });
}

在这种情况下,期望会失败。

于 2013-02-28T17:34:42.270 回答
4

正如@pkopac 评论的那样,runs()并且waitsFor()在 v2 中已被弃用,有利于使用done()记录在案的回调:https ://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support

it("should be able to send a Ghost Request", function(done) {
    var api = fm.api_wrapper;

    var success = function(response) {
        console.dir('server says: ', response);
        expect(response).toEqual('test response')
        done();
    };

    api.sendGhostRequest(success);
});
于 2017-01-04T05:39:59.130 回答
1

查看运行()和等待()

具体来说,您可以调用 waitfor 来检查回调是否以某种方式运行(也许使用布尔值作为检查?),然后运行期望。

运行允许您等到等待完成。

异步茉莉花文档

于 2013-02-28T17:36:18.387 回答