我试图通过Angular测试异步$资源服务。首先请注意,我不想模拟$ resource,我实际上想要获得结果并测试它们。
所以基本上我的getCountries方法只使用Angular的$ resource来返回一组国家。
方式
getCountries(): any {
var countries = this.$resource(
this.apiEndpoint.baseUrl,
{
'get': {
method: 'GET', isArray: false
}
});
return countries;
}
在我的规范中,我无法在哪里运行Jasmine的done()方法。请阅读代码中的注释。
规格
describe(module', (): void => {
var one;
var SelfRegistrationResourceBuilder;
beforeEach((): void => {
angular.mock.module(
'BuilderModule',
'ngResource'
);
inject(
['Builder', (_SelfRegistrationResourceBuilder _: ISelfRegistrationResourceBuilder ): void => {
SelfRegistrationResourceBuilder = _SelfRegistrationResourceBuilder_;
}]);
});
describe('getCountries', (): void => {
beforeEach((done) => { //done is a parameter in beforeEach
SelfRegistrationResourceBuilder.getCountries().get(
(value: any) => {
console.log("no error");
one = "aValue";
done(); //Do I have to call done() here
}, (error: any) => {
console.log("error");
one = "aValue";
//done(); What about here
})
//done(); ..or here
});
it("should...", (done) => {
expect(one).toBe("aValue");
//done(); and here?
});
});
});
所以我的问题似乎是当我运行我的代码时,我或者得到了这个问题的标题中所述的错误,或者如果我使用哪个done()方法我调用那么我的变量名为"一个&# 34;是未定义的,因此暗示成功和错误回调永远不会被调用。我还可以证明成功和错误回调永远不会被调用,因为他们的console.log()不会打印到控制台。
最后,当我在浏览器中查看开发者工具的网络部分时,我看不到对服务器的任何请求。有人可以尝试帮助我,我想除了调用done()之外,我已经弄明白了。
由于
答案 0 :(得分:0)
done
用于异步测试。如果您测试不是异步,请不要使用done
例如:
// No done needed
it("should...", () => {
expect(one).toBe("aValue");
});
对于异步测试,在异步操作完成后将其命名为 。所以:
beforeEach((done) => { //done is a parameter in beforeEach
SelfRegistrationResourceBuilder.getCountries().get(
(value: any) => {
console.log("no error");
one = "aValue";
done(); // Yes call done
}, (error: any) => {
console.log("error");
one = "aValue";
// do not call done. You most likely want to throw to show this is an error case.
})
});