我正在學習如何進行 Angular 測驗,但有些奇怪的事情發生在我身上。問題是,使用相同的確切代碼,當我這樣做時,ng test有時會在添加 IT 塊之前執行減法 IT 塊,而這應該是第一個執行的(有時它實際上會執行):
這是規范代碼:
import { CalculatorService } from './calculator.service';
describe ('calculatorService',()=>{
let calculator:CalculatorService;
let loggerSpy:any;
beforeEach(()=>{
console.log ("calling the beforeEach");
loggerSpy=jasmine.createSpyObj('LoggerServiceSpy', ['log']);
calculator= new CalculatorService(loggerSpy);
});
it('should add two numbers', ()=>{
let result=calculator.add(2,2);
console.log ("add test");
expect(result).toBe(4);
expect(loggerSpy.log).toHaveBeenCalledTimes(1);
});
it('should substract two numbers', ()=>{
let result=calculator.subtract(2,2);
console.log ("substract test");
expect(result).toBe(0, "unexpected substracion result");
expect(loggerSpy.log).toHaveBeenCalledTimes(1);
});
});
這就是我有時會得到的:

其他時候我只是殺死終端(Visual Studio Code中的集成終端,它可以幫助你),ng test再次執行,正常流程完成......我做錯了什么?

編輯:我添加計算器和記錄器服務代碼以防它有幫助(我也不知道為什么this.logger.log我這樣做時沒有輸出測驗,ng test但我想這是另一個問題
計算器-service.ts
import {Injectable} from '@angular/core';
import {LoggerService} from './logger.service';
@Injectable({
providedIn: 'root'
})
export class CalculatorService {
constructor(private logger: LoggerService) {
}
add(n1: number, n2:number) {
this.logger.log("Addition operation called");
return n1 n2;
}
subtract(n1: number, n2:number) {
this.logger.log("Subtraction operation called");
return n1 - n2;
}
}
記錄器服務.ts
import {Injectable} from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LoggerService {
log(message:string) {
console.log(message);
}
}
uj5u.com熱心網友回復:
原因是 Jasmine 默認以隨機順序執行測驗。這可以通過在屬性下的檔案中進行設定來更改,random: false如自述karma.conf檔案中所示。jasmine
然而,這種隨機運行單元測驗的默認行為實際上是一件好事。撰寫好的單元測驗的一般原則是以完全獨立的方式撰寫它們——這意味著,每個測驗都有它自己執行所需的一切。如果您的測驗必須按特定順序運行才能通過,這通常意味著測驗相互依賴,這被認為是不好的做法。
但是,如果您出于某種原因必須按特定順序運行測驗,您當然可以這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/515014.html
