- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道这两种处理Angular框架异步调用的方法在测试时的区别:
它们相似吗?如果不是,有什么区别,我应该在什么时候使用一个而不是另一个?
最佳答案
async/await
的第一种方法是普通 JavaScript,您可以在其中异步运行函数,并且可以等待 promise,然后再转到下一行。
it('it block in an async await way', async(done) => {
await waitForThisFunctionThatReturnsAPromiseBeforeCarringForward();
// do something, make assertions
const x = await getXFromAPromise(); // wait for getXFromAPromise() function to return the promise
// and assign the results to x
// do something, make assertions
done(); // call done to ensure you have run through the whole it block and tell Jasmine you're done
});
fixture.whenStable
基本上等待堆栈中的所有 promise 得到解决,然后再进行断言。
it('demonstration of fixture.whenStable', async(done) => {
// do some actions that will fire off promises
await fixture.whenStable(); // wait until all promises in the call stack have been resolved
// do some more assertions
done(); // call done to tell Jasmine you're done with this test.
});
done 回调是可选的,但我使用它来确保更好的工程(确保它遍历整个 it block )。
编辑 ====================
为了处理可观察对象,我使用了两种方法。
async/await
与 take
和 toPromise
运算符,您可以在其中获取第一个发射并将其转换为 promise 。随意添加其他运算符,例如 filter
以忽略 take(1)
之前的一些发射。
import { take } from 'rxjs/operators';
......
it('should do xyz', async done => {
const x = await component.observable$.pipe(take(1)).toPromise();
expect(x).toBe(....);
done();
});
另一种方式是通过done
回调来订阅
it('should do xyz', done => {
component.observable$.subscribe(result => {
expect(result).toBe(...);
// call done here to ensure the test made it within the subscribe
// and did the assertions and to let Jasmine know you're done with the tests
done();
});
});
关于angular - Angular 中 async/await 和 async/fixture.whenStable 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62071276/
第一个例子 我有以下测试: import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { Com
我有一个带标签的组件。我需要导航到一个选项卡,然后测试可查看的输入等。我可以从控制台日志中看到我正在执行的操作正在调用我正在使用以下过程进行监视的函数。我还可以看到这是以正确的顺序发生的。 不幸的是,
我很清楚这里的这个错误: https://github.com/angular/angular/issues/10148 其中提到需要调用 fixture.detectChanges(); 然后调用
我在一个 Angular2 组件的 ngOnInit 方法中运行一个 http 调用(使用 obervable): ngOnInit() { this.descriptorService.g
我正在为一个应用程序编写 jasmine/karma/webpack 单元测试,其中有很多内部 promise 在代码深处得到解决。我想使用 Angular 的异步、fixture.detectCha
你能帮我区分这两个东西吗。 根据我的理解,如果你只使用 observable,你可以使用 detectChanges()。因此,您可以直接更改组件属性或监视服务调用并返回一个可观察对象,然后调用 de
请注意,这并非特定于 Protractor。问题在于 Angular 2 的内置 Testability service Protractor 碰巧使用。 Protractor 调用 Testabil
尽管 whenStable 返回一个 promise ,但我不允许使用 await。 下面是我的tsconfig "moduleResolution": "node", "emitDecoratorM
我知道 async 和 fakeAsync 方法设置了某种监听器来记录所有异步操作,以便 Angular Testing 框架可以使用 whenStable 和 tick() 来管理等待所有这些东西完
我想知道这两种处理Angular框架异步调用的方法在测试时的区别: 第一个使用 jasmine 方法 async/await 第二个使用 Angular 方法 async/fixture.whenSt
我正在向我的 Angular 7 应用程序添加一些单元测试,但我不确定如何处理与 FileReader 的交互,因为使用 async/whenStable、fakeAsync 和 promise 不能
我是一名优秀的程序员,十分优秀!