Javascript JasmineJQuery,如何测试表单填写和HTML元素的更改?
我试图测试HTML表单的填写以及HTML元素文本的后续更改。我需要使用jasmine jquery创建某种形式的事件 HTMLJavascript 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
未知
您可能只需要触发一个事件,例如:
$('#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。