問題描述
我有一個使用 d3 計時器
調用的方法.每當調用該方法時,該方法都會發出一個帶有幾個值的對象.其中一個值隨時間增加.我想編寫一個測試來檢查這些值是否按升序排列(即是否隨時間增加).
I have a method which is being called using a d3 timer
. Whenever the method is called, the method emits an object with a couple of values.
One of the values increases over time. I would like to write a test to check whether the values are in the ascending order or not (i.e., increasing over time or not).
因此,為了解決這個問題,在我的測試中,我訂閱了事件發射器,在訂閱中,我將收到的對象推送到本地數組中.然后,我期望 array[i]
小于 array[i+1]
.我認為我的邏輯是完全正確的,但我不確定為什么我從 Jasmine 那里得到一個錯誤,說 規范沒有期望
,即使我有一個.
So, to tackle this, In my test, I subscribe to the event emitter and inside the subscription, I am pushing the object which I receive into a local array. And then, I am expecting the array[i]
to be less than the array[i+1]
. I think my logic is perfectly correct but I am not sure why I am getting an error from Jasmine saying that the spec has no expectations
even though I have one.
代碼如下:
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 });
}
}
茉莉花規格:
it('my spec', inject([JumpService], (service: JumpService) =>{
array = [];
//service calls the method
service.output.subscribe(e => {
array.push(e);
// A console statement here will give me the length and the object pushed.
for(let i = 0; i< array.length - 1; i++) {
expect(array[i].f).toBeLessThan(array[i+1].f);
}
});
}));
我在這里做錯了嗎?我該如何應對這種情況?請指導我正確的方向.
Am I doing anything wrong here? How can I tackle such kind of a scenario? Please guide me in a right direction.
謝謝.
推薦答案
一般來說,在測試異步回調函數時,在 promise 解決后期待測試的輸出總是很重要的.您可以將 Angular 測試臺框架的 tick()
與 fakeAsync()
一起使用,或者您可以簡單地回退到 Jasmine 使用 測試異步方法的一般方式完成()
In general, when testing the async callback functions, it is always important to expect the outputs of the test after the promises are resolved. You can use the Angular test bed framework's tick()
with the fakeAsync()
or you can simply fallback to the Jasmine's general way of testing the async methods by using done()
使用 done()
:
it('my spec', (done) => {
array = [];
service.output.subscribe(e => {
array.push(e);
for(let i = 0; i< array.length - 1; i++) {
expect(array[i].f).toBeLessThan(array[i+1].f);
}
done();
});
});
希望這個答案有所幫助.
Hope this answer helps.
注意:我對 fakeAsync()
和 tick()
的運氣并不好,所以我沒有將其包含在答案中.對此感到抱歉.
Note: I didn't had great luck with the fakeAsync()
and tick()
, so I am not including it in the answer. Sorry about that.
這篇關于Spec沒有期待——Jasmine測試回調函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!