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);
});
我真的是 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);
});