【发布时间】:2014-09-21 06:13:09
【问题描述】:
我一直在学习 AngularJS,并且在单元测试方面进展非常顺利,但我遇到了一个棘手的问题。
假设我有一个简单的表格,例如:
<form name="form">
<input type="text" name="number" ng-pattern="/^d+$/">
</form>
如果我在测试控制器之类的东西,我知道我会写成这样(使用 Jasmine + Karma):
beforeEach(module('some.module'));
beforeEach(inject(/* services */) {
/* inject necessary services */
});
it('should be invalid when given bad input', function () {
form.number = 'Not a number';
expect(form.number.$valid).toBeFalsy();
expect(form.$valid).toBeFalsy();
});
但我不知道我需要注入哪些服务,而且我没有任何运气在the forms guide 或the ng-form documentation 中找到有关单元测试的文档。
如何在 Angular 中对表单进行单元测试?
【问题讨论】:
-
你试过注入持有表单逻辑的控制器吗?
-
现在,表单验证由像
ng-pattern这样的普通角度指令处理。如果我确实将控制器注入到我的测试中,它似乎没有对form的任何引用(范围也没有)。 -
您不对表单进行单元测试,而是对处理它的控制器进行单元测试。要测试表单是否匹配 ng-pattern 和其他类似的东西,请使用 e2e 测试。
-
假设我想对处理表单的控制器进行单元测试,我将如何将当前嵌入在表单中的逻辑移动到控制器中?
标签: javascript angularjs unit-testing jasmine karma-runner