标签: jasmine2.0

使用Jasmine 2.0在异步测试中获取"$ digest已在进行中"

我知道在摘要周期中调用$digest$apply手动会导致"$ digest已在进行中"错误,但我不知道为什么我在这里得到它.

这是一个包装服务的单元测试$http,服务很简单,只是防止对服务器进行重复调用,同时确保尝试执行调用的代码仍然获得预期的数据.

angular.module('services')
    .factory('httpService', ['$http', function($http) {

        var pendingCalls = {};

        var createKey = function(url, data, method) {
            return method + url + JSON.stringify(data);
        };

        var send = function(url, data, method) {
            var key = createKey(url, data, method);
            if (pendingCalls[key]) {
                return pendingCalls[key];
            }
            var promise = $http({
                method: method,
                url: url,
                data: data
            });
            pendingCalls[key] = promise;
            promise.then(function() {
                delete pendingCalls[key];
            });
            return promise;
        };

        return {
            post: function(url, data) {
                return …
Run Code Online (Sandbox Code Playgroud)

jasmine angularjs jasmine2.0

36
推荐指数
2
解决办法
1万
查看次数

Jasmine calls.length和callCount未定义

我正在尝试使用Jasmine测试我的chrome扩展,但是我无法获得calls.length并按callCount预期行事.这两种情况下返回undefined.

我已经包含了代码和规范的示例.如果有帮助的话,这是代码的其余部分:https://github.com/DruRly/kamikaze/tree/closeIdleTab

如何重现:

  • git clone https://github.com/DruRly/kamikaze/tree/closeIdleTab
  • cd kamikaze
  • open SpecRunner.html

投机/ kamikazeSpec.js

describe("kamikaze", function() {
  describe("closeIdleTabs", function(){
    it("calls closeIdleTab for each tab received", function(){
      spyOn(kamikaze, 'closeIdleTab');

      kamikaze.closeIdleTabs([1,2,3]);
      expect(kamikaze.closeIdleTab.calls.length).toBe(3);
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

SRC/kamikaze.js

kamikaze = {
  ...

  closeIdleTabs: function(tabs){
    tabs.forEach(function(tab){
      test.closeIdleTab(tab);
    })
  },

  closeIdleTab: function(tab){
    if(tabTimeStamps[tab.id]){
      var secondsSinceUpdated = getSecondsSinceUpdated(tab.id)
      if(secondsSinceUpdated > (minutesUntilIdle * 60)){
        chrome.tabs.remove(tab.id)
      }
    }
  },

  ...
}
Run Code Online (Sandbox Code Playgroud)

javascript bdd google-chrome-extension jasmine jasmine2.0

31
推荐指数
2
解决办法
2万
查看次数

Jasmine间谍重置呼叫不会返回

我正在使用Jasmine(2.2.0)间谍来查看是否调用了某个回调.

测试代码:

it('tests', function(done) {
  var spy = jasmine.createSpy('mySpy');
  objectUnderTest.someFunction(spy).then(function() {
    expect(spy).toHaveBeenCalled();
    done();
  });
});
Run Code Online (Sandbox Code Playgroud)

这按预期工作.但现在,我正在增加第二个级别:

it('tests deeper', function(done) {
  var spy = jasmine.createSpy('mySpy');
  objectUnderTest.someFunction(spy).then(function() {
    expect(spy).toHaveBeenCalled();
    spy.reset();
    return objectUnderTest.someFunction(spy);
  }).then(function() {
    expect(spy.toHaveBeenCalled());
    expect(spy.callCount).toBe(1);
    done();
  });
});
Run Code Online (Sandbox Code Playgroud)

此测试永远不会返回,因为显然done回调从未被调用过.如果我删除该行spy.reset(),测试确实完成,但显然在最后的期望中失败.然而,这个callCount领域似乎是undefined,而不是2.

javascript spy jasmine jasmine2.0

20
推荐指数
2
解决办法
2万
查看次数

Spec没有期望 - Jasmine测试回调函数

我有一个方法,使用a调用d3 timer.每当调用该方法时,该方法都会发出一个具有几个值的对象.其中一个值随着时间的推移而增加.我想写一个测试来检查值是否按升序排列(即,随着时间的推移而增加).

所以,为了解决这个问题,在我的测试中,我订阅了事件发射器并在订阅内部,我将我收到的对象推送到本地数组中.然后,我期待array[i]它低于array[i+1].我认为我的逻辑完全正确,但我不知道为什么我从Jasmine那里得到一个错误,the spec has no expectations即使我有一个错误.

这是代码:

let x = d3.timer((elapsed) => { 
    this.method(); // call the function
    if(elapsed >= 500) {
     x.stop(); // stops the timer.
    }
});

method(elapsed) {
 // do something
 if(elapsed > 500) {
   this.output.emit({x: somevalue, y: somevalue, f: increasingvalue });
 }
}
Run Code Online (Sandbox Code Playgroud)

茉莉花规格:

it('my spec', inject([JumpService], (service: JumpService) =>{
  array = [];
  //service calls the method
  service.output.subscribe(e => {
   array.push(e);
   // A console statement here will …
Run Code Online (Sandbox Code Playgroud)

javascript jasmine typescript jasmine2.0 angular

14
推荐指数
3
解决办法
8407
查看次数

量角器片状

我维护一个复杂的Angular(1.5.x)应用程序,使用Protractor(2.5.x)进行E2E测试.我遇到了这种方法的问题,主要表现在测试看起来很脆弱的方式.在一个拉取请求中完美运行的测试在另一个拉取请求中失败.这涉及简单的定位器,例如by.linkTest(...).我调试了失败的测试,应用程序位于正确的页面上,链接存在且可访问.

有没有其他人遇到这些一致性问题?了解原因或解决方法?

selenium automation jasmine protractor jasmine2.0

12
推荐指数
2
解决办法
2730
查看次数

茉莉花钟如何工作?

我不想读几个小时的代码来找到相关的部分,但我很好奇茉莉如何实现它的时钟.有趣的是它可以使用同步测试代码测试异步代码.AFAIK与当前node.js一起支持ES5,这是不可能的(异步函数在ES7中定义).它是用estraverse解析js代码并从同步测试中构建异步测试吗?

只是我所说的一个例子:

it("can test async code with sync testing code", function () {
    jasmine.clock().install();

    var i = 0;
    var asyncIncrease = function () {
        setTimeout(function () {
            ++i;
        }, 1);
    };

    expect(i).toBe(0);
    asyncIncrease();
    expect(i).toBe(0);
    jasmine.clock().tick(2);
    expect(i).toBe(1);

    jasmine.clock().uninstall();
});
Run Code Online (Sandbox Code Playgroud)

在这里expect(i).toBe(1);应该是一个回调.

javascript jasmine jasmine2.0 ecmascript-7

11
推荐指数
1
解决办法
9224
查看次数

为什么我的HTML测试报告总是落后于一个XML文件?

我的protractor配置文件中的这段代码完美无缺...除了htmlonComplete 中的文件创建始终使用上一次测试运行的junitresults xml文件,而不是在同一配置文件的onPrepare函数中创建的xml文件.所以html页面总是显示测试结果,一个在html页面声明的时间戳后面运行.

一个简单的例子是,如果我从test-results文件夹中的先前测试开始没有xml文件,则html生成器根本找不到用于构建html文件的xml文件,因此不生成html文件.但是新的 xml文件确实显示仍然被创建,放入文件夹,并完全被忽略......直到下一次测试运行.

你能帮助我测试生成一个xml文件,然后用那个 xml文件生成html文件吗?

谢谢!

onPrepare: function() {
    var capsPromise = browser.getCapabilities();   
    capsPromise.then(function(caps) {
        browser.browserName = caps.caps_.browserName.replace(/ /g,"-");
        browser.browserVersion = caps.caps_.version; 
        browserName = browser.browserName;
        browser.reportPath = 'c:/QA/test-results/' + browser.browserName + '/';
    }). then(function(caps) {
            var jasmineReporters = require('jasmine-reporters');
            jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({    
                consolidateAll: true,
                savePath: 'c:/QA/test-results/' + browser.browserName + '/',
                filePrefix: 'junitresults'
        }));
    });
    return browser.browserName, browser.browserVersion, browser.reportPath;
},

onComplete: function() {
  var HTMLReport = require('jasmine-xml2html-converter');
  // Call …
Run Code Online (Sandbox Code Playgroud)

automated-tests jasmine angularjs protractor jasmine2.0

11
推荐指数
1
解决办法
447
查看次数

在Protractor中解释async/await

我是量角器的新手.此函数中的async/await如何工作?任何人都可以向我解释一下吗?

it('TC_01 - Verify Home page title', async () => {
    await headerPage.waitForTitleContain('Homepage', 30000);
    await expect(headerPage.getTitle()).toEqual('Homepage');
});
Run Code Online (Sandbox Code Playgroud)

javascript protractor jasmine2.0

11
推荐指数
1
解决办法
9664
查看次数

如何修复 Jasmine 中已发现的函数错误

我有 3 个测试,每个测试都测试不同的方法。

it('test function1', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function1
   expect(document.getElementById).toHaveBeenCalled();

 });

it('test function2', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function2
   expect(document.getElementById).toHaveBeenCalled();

 });

it('test function3', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function3
   expect(document.getElementById).toHaveBeenCalled();    
 });
Run Code Online (Sandbox Code Playgroud)

但是当我运行这些测试时,我收到以下错误:getElementById has already been spied upon。有人可以解释为什么即使间谍位于不同的测试套件中我也会收到此错误以及如何修复它。

javascript jasmine jasmine-jquery karma-jasmine jasmine2.0

9
推荐指数
2
解决办法
3万
查看次数

当 tslint 中的“no-floating-promises”为 true 时,如何忽略 Jasmine 承诺

有没有办法打开“无浮动承诺”,但让它忽略“toEqual”、“toBe”等 Jasmine 承诺?我想使用它,但它到处抱怨我的期望语句。

expect(1).toEqual(1)  // Would complain about this
Run Code Online (Sandbox Code Playgroud)

例如:在此输入图像描述

typescript protractor jasmine2.0 tslint

6
推荐指数
1
解决办法
1055
查看次数