当前位置: 首页 > 知识库问答 >
问题:

用Jasmine进行异步测试

姬承教
2023-03-14

我正在尝试用Jasmine和RequireJS做一些测试。一切都进行得很好,直到我注意到我所描述的函数的上下文出现了问题。

// auth.js
define(['service/auth'], function(auth) {
  describe('Tests "auth" service', function() {
    var data;
    var OPTIONS = {
      CN: '147144147',
      GV: '147153162'
    };

    auth.on.success.addOnce(function(response) {
      data = response;
    });

    auth.request(OPTIONS);

    it('"status" should exist and be "true"', function() {
      waitsFor(function() {
        return data !== undefined;
      });

      runs(function() {
        expect(data['status']).toBeDefined();
        expect(data['status']).toBeTruthy();
      });
    });

  });
});

// login.js
define(['service/login'], function(login) {
  describe('Tests "login" service', function() {
    var data;
    var OPTIONS = {
      oper: 1,
      codigoouemail: '101',
      senha: '10151015'
    };

    login.on.success.addOnce(function( response ) {
      data = response;
    });

    login.request(OPTIONS);

    it('Should get the service response for user "' + OPTIONS.codigoouemail + '"', function() {
      waitsFor(function() {
        return data !== undefined;
      });

      runs(function() {
        expect(data).toBeDefined();
      });
    });

  });
});

有人知道怎么解决这个吗?

共有1个答案

华睿识
2023-03-14

下面是一个异步测试示例,用于检查是否创建了vos

it('should return a list of item VOs', function() {
  var dfd = $q.defer();
  var items = mock.content.items[1].items;

  runs(function() {
    dfd.promise.then(function(VOs) {
      expect(VOs.length).toBe(items.length);
      expect(A.equals(itemVO(items[0]), VOs[0])).toBe(true);
    }, this.fail);
  });

  waits(50);

  runs(function() {
    itemsVO(dfd, items);

    $rootScope.$digest();
  });
});

所以首先我运行一个函数来监听我的异步功能何时完成,我等待50ms来检查应用程序是否准备好,然后我运行我的异步功能。请注意expect在回调中的情况。

 类似资料:
  • 全部: 我对Jasmine测试非常陌生,我想知道的一个关于异步测试的问题是: 有谁能简单解释一下Jasmine是如何知道里面有一个done()函数调用并等待它完成的? 例如,如果我把一些异步调用在之前: Jasmine怎么知道它应该让规范测试等待? 谢谢

  • 我试图为我编写的一些代码编写单元测试,遇到的问题是我希望在执行函数后调用模拟回调,但我的测试失败,因为它从未被调用。 正在测试的功能非常简单: 我怀疑的问题是,由于请求的异步性质,jasmine在API调用中执行模拟回调之前测试期望值。我尝试过使用其他人建议使用的done()和flags,但没有成功。希望能在这方面提供一些指导。

  • 我知道在摘要周期中手动调用或会导致$digest已经在进行中错误,但我不知道为什么我在这里得到它。 这是一个包装的服务的单元测试,该服务足够简单,它只是防止对服务器进行重复调用,同时确保试图进行调用的代码仍然获得预期的数据。 单元测试也非常简单,它使用来预期请求。 当调用时出现“$digest ready in progress”错误,这将导致失败。我不知道为什么。我可以通过在这样的超时中包装来解

  • jasmine:在jasmine指定的超时内没有调用异步回调。DEFAULT_TIMEOUT_INTERVAL 测试window.post消息指令 用Jasmine async测试postMessage不起作用 我有下面的代码,我正在接收下面的输出。 在jasmine.DEFAULT\u timeout\u INTERVAL指定的超时内未调用异步回调 myService在父描述函数中定义。正如我所

  • 我为javascript编写了Jasmine测试。我正在尝试使用Phantomjs运行Jasmine测试。我从Phantomjs.org下载了Phantomjs并尝试使用phantomjs.exe//phantom jasmine路径运行它http://localhost/myJasmineTestRunner.html.Google帮不了我。有人能建议我如何使用phantomjs测试jasmin

  • 我想知道哪种方法是测试不返回任何函数(只更改一个字段值)并包含异步调用的最佳方法。 这是我要测试的AngularJS控制器,我调用的服务返回一个promise(总是返回{name:"John"}): 如果sayHello函数不包含异步调用,这将是规范,但它总是失败,因为scope.greeting总是空的。 我将如何使用此规范来处理异步调用?我真的不明白如何以及在哪里使用Jasmine 2.0的“