当前位置: 首页 > 知识库问答 >
问题:

模式的Jasmine测试输入

慕胡媚
2023-03-14

我有一个包含以下输入的表单:

<代码>

我想测试表单是否无效,如果用户键入无效的电子邮件:

it('...', function() {
    form.email.$setViewValue('invalid');
    expect(form.email.$valid).toBeFalsy(); // OK
    form.email.$setViewValue('invalid@');    
    expect(form.email.$valid).toBeFalsy(); // OK
    form.email.$setViewValue('invalid@host');     
    expect(form.email.$valid).toBeFalsy(); // Not OK    
});

最后一个expectatijon失败,因为输入是有效的,尽管电子邮件正则表达式需要一个域。感觉好像在我的测试中没有使用该模式,因为当我将类型更改为text时,它已经在第一次预期中失败了。我如何确保模式在测试中被提取出来?

为了完整起见,这是正则表达式(不是我写的):

^[_A-Za-z0-9-] (\.[_A-Za-z0-9-] )*@[_A-Za-z0-9] [_A-Za-z0-9-]*[_A-Za-z0-9] (\.[A-Za-z0-9] )*(\.[A-Za-z]{2,})$

将类型更改为<code>文本

我使用jasmine 2.4.1和角1.4.2。正如这里所解释的,我使用ngHtml2Js预处理器在我的测试中初始化表单。

编辑:

这是如何初始化表单:

beforeEach(inject(function($rootScope, $templateCache, $compile) {
   var $scope = $rootScope.$new();
    vm = $controller('RegisterController', {$scope: $scope});
    var templateHtml = $templateCache.get("register.html");
    var template = angular.element("<div>" + templateHtml + "</div>");
    $compile(template)($scope);
    var form = $scope.registerForm;
    $scope.$apply();
    scope = $scope;
}));

共有2个答案

龙承颜
2023-03-14

我认为您应该在使用form.email.$setViewValue后调用scope.$digest();,范围分配给您的$compile。这就是我在每次测试中使用的。

您还可以在此处查看更多信息:https://stackoverflow.com/a/22772504/4583079

端木皓君
2023-03-14

AngularJS仍然在开发方式上工作

angular.module('app', [])

describe('Registration form', () => {
  'use strict'

  beforeEach(module('app'))

  let form
  let scope

  beforeEach(inject(($rootScope, $compile) => {
    scope = $rootScope.$new()
    var formElem = ['<form name="registrationForm">',
      '<input type="text" name="number" ng-model="input" ng-pattern="/^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[_A-Za-z0-9]+[_A-Za-z0-9-]*[_A-Za-z0-9]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$/">',
      '</form>'
    ].join('')
    $compile(formElem)(scope)
    form = scope.registrationForm
  }))

  it('has no `$valid` state', () => {
    expect(form.$valid).toBeTruthy()
    form.number.$setViewValue('invalid email address')
    expect(form.number.$valid).toBeFalsy()
  })

  it('has `$valid` state', () => {
    expect(form.$valid).toBeTruthy()
    form.number.$setViewValue('some@valid.address')
    expect(form.number.$valid).toBeTruthy()
  })
})
<script src="https://safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-mocks.js"></script>
<link href="https://safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" />
 类似资料:
  • 我试图为我编写的一些代码编写单元测试,遇到的问题是我希望在执行函数后调用模拟回调,但我的测试失败,因为它从未被调用。 正在测试的功能非常简单: 我怀疑的问题是,由于请求的异步性质,jasmine在API调用中执行模拟回调之前测试期望值。我尝试过使用其他人建议使用的done()和flags,但没有成功。希望能在这方面提供一些指导。

  • 问题内容: 我正在尝试使用Jasmine规格文件对Angular服务进行单元测试。这需要加载模块。这是一个简单的规范,旨在简单地加载Angular模块: 当我运行Jasmine时,这将导致以下错误 jasmine.yml文件包含 该软件的版本为: Rails 3.2.7 jasmine-core 1.2.0 jasmine-headless-webkit 0.8.4 AngularJS 1.0.2

  • 问题 假如你正在使用 CoffeeScript 写一个简单地计算器,并且想要验证其功能是否与预期一致。可以使用 Jasmine 测试框架。 讨论 在使用 Jasmine 测试框架时,你要在一个参数(spec)文档中写测试,文档描述的是代码需要测试的预期功能。 例如,我们希望计算器可以实现加法和减法的功能,并且可以正确进行正数和负数的运算。我们的 spec 文档如下列所示。 # calculator

  • 本文向大家介绍Jasmine JavaScript测试-toBe与toEqual,包括了Jasmine JavaScript测试-toBe与toEqual的使用技巧和注意事项,需要的朋友参考一下 数组可以通过2种方式进行比较- 它们引用内存中的同一数组对象。 它们可能引用不同的对象,但是它们的内容都是相同的。 示例 对于情况1,茉莉提供了toBe方法。以此作为参考。例如, 输出结果 这将给出输出-

  • 我试图用Jasmine为Angularjs编写单元测试。这是我的控制器: 和测试 测试失败,即使我试图测试期望(true). toBe(true); 茉莉花,因果报应,棱角分明的嘲弄都在我的索引里。jasmine调试页面中的html,还有测试脚本。 我发现如果删除beforeach()块,expect(true)。托比(真的)通过了。 下面是一个错误:

  • 问题内容: 我试图在将其他模块作为依赖项的模块中进行单元测试控制器代码的单元化,但是还没有弄清楚如何正确模拟它们。 我正在使用Jasmine Framework,并使用Karma(Testacular)运行测试。 模块代码 规格代码 我得到的错误是Karma是“ no module af.widgets”,因此显然我没有对模块依赖项进行模拟。有什么提示吗? 问题答案: 如果要模拟声明一个或多个服务