rxjs 抛出茉莉花测试问题

rxjs throw jasmine test issue

我真的是 Jasmine 的新手,我想弄清楚我做错了什么。目前我正在尝试编写一个测试,其中来自组件实例的错误消息与变量错误匹配,但它失败了。我将变量传递给错误抛出,所以我认为它应该通过。感谢您的帮助。

错误: TodosComponent should set the message property if server returned an error when adding a new todo FAILED

import { TodosComponent } from './todos.component';
import { TodoService } from './todo.service';
import { from, empty, throwError } from "rxjs";

describe('TodosComponent', () => {
  let component: TodosComponent;
  let service: TodoService;
  beforeEach(() => {
    service = new TodoService(null);
    component = new TodosComponent(service);
  });

  it('should set the message property if server returned an error when adding a new todo', () => {
    let error = 'error from the server';
    let spy = spyOn(service, 'add').and.returnValue(throwError(new Error(error)));
    component.add();
    expect(component.message).toBe(error);

  });
});

todo.component.ts


import { TodoService } from './todo.service'

export class TodosComponent {
  todos: any[] = [];
  message;

  constructor(private service: TodoService) { }

  ngOnInit() {
    this.service.getTodos().subscribe(t => this.todos = t);
  }

  add() {
    var newTodo = { title: '... ' };
    this.service.add(newTodo).subscribe(
      t => this.todos.push(t),
      err => this.message = err);
  }

  delete(id) {
    if (confirm('Are you sure?'))
      this.service.delete(id).subscribe();
  }
}

您似乎在匹配不同的值。

如果你想让 component.message 成为一个字符串,那么你需要抛出 string 而不是 Error 对象:

let spy = spyOn(service, 'add').and.returnValue(throwError(new Error(error)));
                                                                 ||
                                                                 \/
                                                     throwError(error)

否则你需要比较 message 和那个 new Error

完整的测试用例为:

it('should set the message property if server returned an error when adding a new todo', () => {
  let error = 'error from the server';
  let spy = spyOn(service, 'add').and.returnValue(throwError(error));
  component.add();
  expect(component.message).toBe(error);
});