Javascript JasmineJQuery,如何测试表单填写和HTML元素的更改?

Javascript JasmineJQuery,如何测试表单填写和HTML元素的更改?,javascript,html,dom,jasmine,jasmine-jquery,Javascript,Html,Dom,Jasmine,Jasmine Jquery,我试图测试HTML表单的填写以及HTML元素文本的后续更改。我需要使用jasmine jquery创建某种形式的事件 HTML 未知 您可能只需要触发一个事件,例如: $('#submit-button').click(); 这将触发click事件。然后,您可以检查此事件在页面上更改的任何条件。如果您的表单html位于一个单独的模板中,文件名为 templates/form.tmpl.html js/validation.js 您的jquery位于一个单独的文件中,例如 template

我试图测试HTML表单的填写以及HTML元素文本的后续更改。我需要使用jasmine jquery创建某种形式的事件

HTML

未知

您可能只需要触发一个事件,例如:

$('#submit-button').click();

这将触发click事件。然后,您可以检查此事件在页面上更改的任何条件。

如果您的表单html位于一个单独的模板中,文件名为

templates/form.tmpl.html
js/validation.js
您的jquery位于一个单独的文件中,例如

templates/form.tmpl.html
js/validation.js
并包含验证代码,如

$(".form-holder").on("submit", function() {

  event.preventDefault();

  var userInput = $('#input-text').val();

  if (userInput === 'the correct text') {
    $('#text-response').text('Correct');
    return;
  }

  $('#text-response').text('Incorrect');
});
那么您的测试规范可以类似于此

describe('Interface logic', function() {

    jasmine.getFixtures().fixturesPath = '';

    beforeEach(function() {
        loadFixtures('templates/form.tmpl.html');
        appendSetFixtures('<script src="js/validation.js"></script>')
    });

    it('Will return correct if logic applies', function(){
      $('#input-text').val('the correct text');
      $('#submit-button').trigger("click");
      expect($('#text-response').text()).toBe('Correct');
    });

    it('Will return incorrect if logic applies', function(){
      $('#input-text').val('the incorrect text');
      $('#submit-button').trigger("click");
      expect($('#text-response').text()).toBe('Incorrect');
    });

});
description('接口逻辑',函数()){
jasmine.getFixtures().fixturesPath='';
beforeach(函数(){
LoadFixture('templates/form.tmpl.html');
附件固定装置(“”)
});
它('如果逻辑适用,将返回正确的',函数(){
$(“#输入文本”).val(“正确的文本”);
$(“#提交按钮”)。触发(“单击”);
期望($('#文本响应').text()).toBe('Correct');
});
它('如果逻辑适用,将返回错误',函数(){
$(“#输入文本”).val(“不正确的文本”);
$(“#提交按钮”)。触发(“单击”);
expect($('#text response').text()).toBe('error');
});
});
和规范运行程序html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Spec Runner</title>

  <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.3/jasmine.css">
  <script type="text/javascript" src="lib/jasmine-2.0.3/jasmine.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.3/jasmine-html.js"></script>
  <script src="lib/jasmine-2.2/boot.js"></script>

  <script type="text/javascript" src="lib/jquery-2.1.3.min.js"></script>
  <script type="text/javascript" src="lib/jasmine-jquery.js"></script>

  <script type="text/javascript" src="specs/form.spec.js"></script>
</head>

<body>
</body>
</html>

规格跑步者

这是我的解决方案,但是spec runner持续刷新是因为您正在点击而不是

谢谢,但这仍然不起作用,我想知道这是否是服务器的问题我有一个Node/Express服务器像这样运行<代码>var express=要求('express');var-app=express();var server=require('http')。createServer(应用程序);var root=uuu dirname+'/'app.use(express.static(root))app.get('/index',function(req,res){res.sendFile(root+'index.html');});get('/spec',function(req,res){res.sendFile(root+'SpecRunner.html');});listen(3000,function(){console.log(“服务器在端口3000上侦听”);});module.exports=服务器这是有道理的,尽管出于某种原因,当我使用
时,单击()
而不是
。触发器()
会导致我的SpecRunner不断刷新,我已经使用chrome和firefox对其进行了测试,有什么想法吗?我打赌它会触发页面发布/重新加载。您可以尝试执行
e.preventDefault()
。这将保持在同一页上,而不使用服务器post。