Nano Hash - криптовалюты, майнинг, программирование

Если я добавлю подписку в службу и модульное тестирование этой службы, я получаю, что свойство «подписаться» не существует для типа «Подписка»?

это мой сервис

my-service.service.ts

export class MyService {
    constructor(public http: HttpClient) {}

    createChatRecord (data, id) {
        let logData = {"hist" : data , "uid": id };
        let headers = new HttpHeaders();
        headers = headers.set("Content-Type", "application/json");
        let options = { headers: headers };

        return this.http.post(MY_URL, logData, options)
            .subscribe(res => res);

    }
}

Это мой файл спецификации для вышеуказанного сервиса.

my-service.spec.ts

it("It should post", () => {
        myservice.createChatRecord(mockData, mockId)
            .subscribe((data: any) => {
            expect(data).toBe(null);
        });
    const mockReq = httpMock.expectOne(MY_URL);
    expect(mockReq.request.method).toBe("POST");
    mockReq.flush(null);
    httpMock.verify();
});

Если я добавлю подписку в файл спецификации, я получаю эту ошибку. Свойство «подписаться» не существует для типа «Подписка». Но если я удалю подписку в сервисе, эта ошибка не будет отображаться.

Мне нужно использовать подписку в моем сервисе. Как я могу проверить этот почтовый вызов без этой ошибки?

Любая помощь будет оценена по достоинству!


Ответы:


1

У вас неправильно указано использование subscribe() в вашем классе обслуживания. Если вы удалите это использование, вы избавитесь от этой ошибки.

createChatRecord (data, id) {
    let logData = {"hist" : data , "uid": id };
    let headers = new HttpHeaders();
    headers = headers.set("Content-Type", "application/json");
    let options = { headers: headers };

    return this.http.post(MY_URL, logData, options);

}
19.04.2018
  • но если я удалю эту подписку, она не будет звонить по сети. Неправильно ли добавлять подписку в сервисе? 19.04.2018
  • Да неправильно так делать. Сетевой запрос будет сделан при вызове метода subscribe(). Вам нужно иметь подписку в своем модульном тесте, чтобы проверить это, и в вашем коде, где вы вызываете createChatRecord(...), вам также нужно будет подписаться там. 19.04.2018
  • Большое спасибо. Не могли бы вы обновить свой ответ образцом фрагмента или чем-то еще, чтобы он был более понятным для меня? 19.04.2018
  • Вы ознакомились с руководством по Angular, чтобы узнать, как это сделать? Они отлично справляются с демонстрацией того, как настроить и использовать службу, которую вы создаете, показывая вам, как это сделать. Вот конкретный шаг в руководстве, в котором подробно описано, как это сделать: angular.io/tutorial/toh-pt6 19.04.2018

  • 2

    Как предложил Даниэль, я удалил подписку из сервиса и добавил сервис в метод, в котором я вызываю createChatRecord.

    Моя функция, в которой она вызывает createChatRecord

    myfunction() { // To make call record in service now 
        this.servicenow.createChatRecord(this.conversationData, this.userId)
        .subscribe();
    }
    

    myservice.service.ts

     createChatRecord (data, id) {
            let logData = {"hist" : data , "uid": id };
            let headers = new HttpHeaders();
            headers = headers.set("Content-Type", "application/json");
            let options = { headers: headers };
    
            return this.http.post(MY_URL, logData, options);
    
        }
    

    Итак, я узнал, что если я подпишусь на сервис, он вернет подписку, а не Observable, и поэтому я получил эту ошибку.

    20.04.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..