- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用例:
对于我的 angularJS(1.6.4) 应用程序,我正在用 jasmine 编写单元测试。
在我的测试用例中,我调用了一个 poll() 函数,该函数使用 $interval 反复调用另一个函数 CheckTaskStatus()。我正在监视 CheckTaskStatus() 并想检查它是否已被调用了一定次数。
所以在调用 poll() 之后,我希望能够等待一段时间,然后检查使用 expect() 调用 CheckTaskStatus() 的次数。
问题:
我一直无法找到一种方法让 Jasmine 在调用 poll() 之后和 expect() 之前等待。
在 poll() 之后,我尝试使用以下选项,但这些选项不会导致 Jasmine sleep :
constructor(private $q: ng.IQService, private $http, private $interval) {}
public poll(interval: number, pollFn: () => ng.IPromise<any>, until?: (any) => boolean, cancel?: ng.IPromise<any>) {
let intervalPromise = null;
const done = this.$q.defer();
const intervalFn = () => {
pollFn().then((pollFnResult) => {
if (until && until(pollFnResult)) {
this.$interval.cancel(intervalPromise);
done.resolve();
}
}).catch(() => {});
};
// Set up an interval to execute the pollFunction
intervalPromise = this.$interval(intervalFn, interval);
intervalPromise.catch(() => {});
intervalFn();
if (cancel) {
cancel.then(() => {
this.$interval.cancel(intervalPromise);
done.resolve();
})
.catch(() => {});
}
return done.promise;
}
fdescribe('myPolling module tests', () => {
'use strict';
let $rootScope,
$q: ng.IQService,
$http,
$interval,
$timeout;
beforeEach(mockModule('myPolling'));
beforeEach(() => {
jasmine.clock().install();
});
beforeEach(inject((_$rootScope_, _$q_, _$http_, _$interval_, _polling_, _$timeout_) => {
this.$rootScope = _$rootScope_;
this.$q = _$q_;
this.$http = _$http_;
this.$interval = _$interval_;
this.polling = _polling_;
$timeout = _$timeout_;
}));
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function SleepForASecond() {
await sleep(1050);
}
it('blah', () => {
let pollCount = 0;
let pollObj = {
pollFn: () => {
pollCount++;
return this.$q.when(pollCount);
}
};
// jasmine.createSpy('pollFn');
spyOn(pollObj, 'pollFn').and.callThrough();
let cancel = this.$q.defer();
this.polling.poll(100, pollObj.pollFn, () => false, cancel.promise);
// Need a mechanism to wait for a second.
// SleepForASecond().then(() => { cancel.resolve(); });
expect(pollObj.pollFn).toHaveBeenCalledTimes(10);
});
});
最佳答案
AngularJS 异步代码和任意 JS 代码在 Jasmine 中的测试方式不同。
AngularJS 服务是专门为使测试同步而设计的,包括 $interval
:
In tests you can use $interval.flush(millis) to move forward by millis milliseconds and trigger any functions scheduled to run in that time.
let cancel = this.$q.defer();
this.polling.poll(100, pollObj.pollFn, () => false, cancel.promise);
$interval.flush(1050);
expect(pollObj.pollFn).toHaveBeenCalledTimes(10);
tick
同步执行它们方法。
beforeEach(() => {
jasmine.clock().install();
});
afterEach(() => {
jasmine.clock().uninstall();
});
it('...', () => {
SleepForASecond().then(() => {
expect(1).toBe(0);
});
jasmine.clock().tick(1050);
});
async
职能。这允许无缝测试基于 Promise 的函数,但 Promise 会产生真正的延迟并导致异步测试:
it('...', async () => {
await SleepForASecond();
expect(1).toBe(0);
});
关于angularjs - 睡在 Jasmine 里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46198544/
我有一个设计。我在这里遇到一个问题。 我要做的是,我必须显示前 3 个 li 标签的 100% 宽度,并保留 li 标签的 33.33%。 这是我的预期输出 li-100% width li-100%
用例: 对于我的 angularJS(1.6.4) 应用程序,我正在用 jasmine 编写单元测试。 在我的测试用例中,我调用了一个 poll() 函数,该函数使用 $interval 反复调用另一
如何在 hookdisplayTop 中获取当前产品? 这是我确保我在“产品”页面中的当前方式: if ( Dispatcher::getInstance()->getController() ==
我有一个带有“li”-s 的导航菜单。我想像这样把这个 li 变成六 Angular 形: 我该怎么做? 最佳答案 我会使用带边框的伪元素。 * { margin: 0; paddin
我是 JQuery 的新手。我试图基本上允许访问者在我的网站上的两种颜色主题之间进行选择。当他们单击浅色主题的链接时,除了我的导航菜单中的各种元素外,所有内容都会按预期改变颜色。这是 JQuery:
所以我试图在我的 Accordion 中的一些文本下面实现一个日期。 文本和图像由用户插入到 wordpress 的文章部分,日期应始终显示在文本下方。但是一直报错,一直在1970。 下面的代码:
我需要在一段时间内将测试数据提供给 Swing 间隔。数据集需要很长时间才能解析,所以我使用 SwingWorker 在后台解析它。在将数据馈送到 GUI 时(例如,每秒一个项目),我可以从 Swin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 prev next function showPage(page) { var listItems =
里?
我有一个小程序,其中有冰淇淋口味列表,计算机使用“console.log();”打印一个句子和味道。我已经开始了这个项目,它看起来像这样: var randomFlavour = Math.rando
我想创建自定义 toast,其中一个 View 有点脱离父 View 。所以我做了这样的事情 这是我定制的 toast round_button.xml
在过去的 6 个月里,我一直在从 repl 运行我的 Clojure 应用。 也就是说,每当我想运行该应用程序时,我都会加载一个 clojure repl,然后输入:(load-file "src/r
我想在我的网页的整个主体周围添加一个边框。 我创建了一个布局,其中包含一个主体,其中包含多个 div 标签。我添加了我认为会在所有内容周围放置边框的 CSS。不幸的是,出于某种原因,我布局中的最后两个
我有一个无序列表 (ul),我正在尝试制作 3 列。当我有 4 个 li's 时,它只显示 2 列。我怎样才能让它有 3 列和 4 个 li ? 此外,我希望 li 从左到右,而不是从上到下,如下所示
我目前正在使用 JPA 创建一个批处理,其层次结构为 Tasklet-> 访问器-> 服务-> 处理器,并且我正在使用 Glassfish 作为我的数据库。但当我运行时` [ERROR] [com.a
到目前为止我有这个: $(".actor ul li").not($(".actor ul li").slice(0,11)).hide(); 我还想从 hide() 中排除最后一个 li。我该怎么做
我必须使用 tools.jar 中的库并因此添加了此依赖项: com.sun tools 1.6.0 system ${java.home}/../lib/t
if(BrowserDetect.browser=="safari"){document.write('')} 我可以在 html 文档的底部放置条件注释吗? (在体内)还是应该在头部? 就页面速度
我是一名优秀的程序员,十分优秀!