При использовании метода flush (): «Автоматическое преобразование в JSON не поддерживается для типа ответа». - PullRequest
0 голосов
/ 23 мая 2019

, когда я использую метод flush () для тестирования HTTP-запросов, у меня появляется эта ошибка: автоматическое преобразование в JSON не поддерживается для типа ответа. Можете ли вы также объяснить мне цель метода flush (). Я не очень понимаю это.

Thanks ! 

Проблема не была действительно решена. Мы должны добавить метод async () к функции "it" следующим образом: "it ('должен получить сообщение'", async (() => {

import { TestBed } from '@angular/core/testing';
import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing"
import { DataService } from './data.service';
import { Observable } from 'rxjs';
import { Post } from './post.model';
import { HttpClientModule } from '@angular/common/http';

describe('DataService', () => {

  let service: DataService
  let  httpTestingController: HttpTestingController
  let attemptedPost : Post;
  const post = {
    userId: 1,
    id: 1,
    title: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    body: "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  };


  beforeEach(() => { TestBed.configureTestingModule({

    imports : [HttpClientTestingModule,HttpClientModule],
    providers : [DataService]
  });

    service = TestBed.get(DataService);
    httpTestingController = TestBed.get(HttpTestingController)
});

  it('should be created', () => {
    expect(service).toBeTruthy();
  });

  it('should get the post', () => {


    service.getPosts().subscribe( (postRetrieved) => {

      attemptedPost=postRetrieved;
    }); 

   const req =  httpTestingController.expectOne('https://jsonplaceholder.typicode.com/posts/1');
   req.flush(attemptedPost);
   // expect(attemptedPost).toEqual(post);

  });
});

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Ваша ошибка в том, что метод subscribe равен async, поэтому попробуйте следующее:

service.getPosts().subscribe( (postRetrieved) => {

      attemptedPost=postRetrieved;

   const req =  httpTestingController.expectOne('https://jsonplaceholder.typicode.com/posts/1');
   req.flush(attemptedPost);
   // expect(attemptedPost).toEqual(post);

});
0 голосов
/ 23 мая 2019

flush() метод - это то, что ваш ложный запрос вернет. Думайте об этом как о значении, исходящем из конечной точки. В вашем случае, если вы сбросите значение attemptedPost, это то, что должна вернуть конечная точка, поэтому вам нужно убедиться, что модель пытаемого поста и реальная модель, исходящие из конечной точки, совпадают, поэтому ваш код действительно работает.

В вашем коде вы сбрасываете attemptedPost, но вы никогда не присваиваете ему значение, вы можете либо присвоить ему значение, либо сбросить post.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...