javascript - Jasmine Angular 测试指令应该失败

标签 javascript angular jasmine angular-directive

所以我做了一个简单的指令,当输入无效时抛出错误,但当我尝试抛出时它成功了,这是正确的,但是当我 not.toThrow()它同样成功。这告诉我我做错了什么,但无法弄清楚是什么。有人可以帮忙吗?

测试

// Test component
@Component({
  template: `<div [addClass]="data"></div> `
})
class TestAddClassComponent {
   data: string | Array<string>;
}


describe('AddClassDirective', () => {
    let component: TestAddClassComponent;
    let fixture: ComponentFixture<TestAddClassComponent>;
    let element: DebugElement;

    beforeEach(() => {
        TestBed.configureTestingModule({
          declarations: [TestAddClassComponent, AddClassDirective]
        });
        fixture = TestBed.createComponent(TestAddClassComponent);
        component = fixture.componentInstance;
        element = fixture.debugElement.query(By.css('div'));
    });

    it('should throw error', () => {
       component.data = 'some-invalid-input';
       fixture.detectChanges();

       expect(component).toThrow();
       // Same result as:
       // expect(component).not.toThrow();

    });
});

指令

@Directive({
  selector: '[addClass]'
})
export class AddClassDirective implements OnInit {

    ngOnInit() {
        if (this.valid(this.value)) {
          // Do something
        } else {
          throw new Error();
        }
    }
}

最佳答案

toThrow 需要一个函数作为参数。

将你的断言改成这样

expect(
  () => fixture.detectChanges()
.toThrow()

关于javascript - Jasmine Angular 测试指令应该失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49937553/

相关文章:

javascript - ajax REST API 安全性防止客户端劫持

javascript - 为什么我运行这个测试时没有调用这个 sinon spy?

javascript - Jasmine 无法检测到复选框

javascript - 为什么一个 RxJS Subject 比多个事件监听器更快?

javascript - 在我的应用程序 angular2 aspnet core 中找不到错误 angular2-cookies/core.js

javascript - 使用 css 定位器在 Protractor 中定位第二个、第三个、第四个……第八个元素

javascript - 数据表多选下拉过滤器更新过滤器更改

javascript - Handlebars 在#each中不同对象中的一般上下文对象中达到键值对

javascript - 如何在 Jasmine 中测试验证器

migration - 从 Angular 2 迁移到 Angular 4 值得吗?