#angular #karma-jasmine
#angular #karma-jasmine
Вопрос:
$loggedIn = new BehaviorSubject<boolean>(false);
constructor(private authHttp: AuthenticatedHttp, private httpResponseHandlerService: HttpResponseHandlerService) {
this.$loggedIn.next(!this.jwtHelper.isTokenExpired(this.getToken()));
if (this.$loggedIn.getValue()) {
this.checkAuth().subscribe((response) => {
if (!response) {
this.logout();
}
});
}
}
Есть $loggedIn
значение, которое является наблюдаемым, и мне нужно создать значение-заглушку, которое должно быть this.$loggedIn.next(true)
у меня .spec.ts
.
Комментарии:
1. Если вы хотите
!this.jwtHelper.isTokenExpired(this.getToken())
оценить как истинный шпионскийisTokenExpired
методjwtHelper
и вернутьсяfalse
от шпиона.2. Я пытался достичь значения $ isLoggedIn из .spec.ts. У меня есть служба-заглушка AuthServiceStub = { getDecodedToken() { return stubValue; }, checkAuth() { return of (false) } }, подобная этой, и я хочу получить это значение, как функции.
3. Я бы посоветовал использовать шпион для проверки того, что
isTokenExpired
вызывается с ожидаемым значением, но вместо этого вы могли бы использовать заглушку. Однако вам нужно заглушить правильный класс и метод, чтобы получить фиктивное истинное значение, чего вы, похоже, не делаете.4. @BatuhanKeten Можете ли вы предоставить пример кода для
component
и егоspec
файла. Это дало бы вам быстрое решение для вас, и мне было бы легко предоставить точное решение5. Спасибо за ваши комментарии. Я решил это, высмеивая весь класс в моем файле спецификации.
Ответ №1:
Вы могли бы шпионить за this.jwtHelper.isTokenExpired()
, чтобы вернуть значение, которое вы хотите для своего теста. Единственное, что у вас может возникнуть, это то, что this.jwtHelper
является закрытым членом вашего класса service, поэтому шпионить за ним будет не так-то просто. В этом случае тест может предлагать вам изменить дизайн вашего класса, создав другой закрытый метод:
private isTokenExpired(): boolean {
return this.jwtHelper.isTokenExpired(this.getToken());
}
Таким образом, вы можете отслеживать это в своем тесте:
spyOn(yourService, 'isTokenExpired').and.returnValue(false);