rxjs抛出jasmine测试问题



我对Jasmine真的很陌生,我正在努力找出我做错了什么。目前,我正在尝试编写一个测试,其中来自组件实例的错误消息与变量error匹配,但它失败了。我正在将变量传递给error throw,所以我认为它应该传递。我感谢你的帮助。

错误: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.组件.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)

否则,您需要将messagenew 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);
});

最新更新