如何在 Jasmine 中 运行 一个 js 函数?
How to run a js function in Jasmine?
我可以 运行 对 js 文件进行 jasmine 测试,但我似乎无法 运行 测试框架中的任何函数。
这是JS文件jasmine_test.js
$(document).ready(function() {
function hello(){
console.log("yo")
}
hello()
});
这里是 form_detail_spec.js
describe("tthe things", function(){
it("testing the things", function(){
var array = ["one"];
//isOptionalEmailForm(array);
//expect(isOptionalEmailForm(array)).toBe(true);
hello()
expect(1).toBe(1);
});
});
当我 运行 规范文件时,我在 jasmine 控制台中收到以下错误:
ReferenceError: hello is not defined
规范未通过。如果我从测试中删除 hello() ,它会很好地工作。
这里是 specrunner.html 文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec Runner v2.2.0</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.2.0/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine-2.2.0/jasmine.css">
<script type="text/javascript" src="../js/vendor/jquery/jquery-1.11.2.js"></script>
<script src="lib/jasmine-2.2.0/jasmine.js"></script>
<script src="lib/jasmine-2.2.0/jasmine-html.js"></script>
<script src="lib/jasmine-2.2.0/boot.js"></script>
<script type="text/javascript" src="../js/vendor/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript" src="../js/vendor/bootstrap/bootstrapValidator.min.js"></script>
<script type="text/javascript" src="../js/validator_parameters.js"></script>
<!-- include source files here... -->
<!-- <script src="src/Player.js"></script> -->
<!-- <script src="src/Song.js"></script> -->
<script src="../js/jasmine_test.js"></script>
<!-- include spec files here... -->
<!-- <script src="spec/SpecHelper.js"></script> -->
<!-- <script src="spec/PlayerSpec.js"></script> -->
<script src="spec/form_details_spec.js"></script>
</head>
<body>
</body>
</html>
函数hello
在另一个函数中。它不暴露于外界,因此您无法直接对其进行测试。将您的函数编写为模块非常好,例如 CommonJS、AMD 或新的 ES6 modules,然后测试这些模块。
这就是您使用 CommonJS/NodeJS
编写和访问模块的方式
// hello.js
module.exports = hello; // export your function as a module
function hello() {
// code here
}
// test.js
var hello = require('./path/to/hello'); // you don't need to write the .js extension
// you can now call `hello()` in your test code here.
不太理想、更传统的方法是让您的 hello
函数可以通过某些不可避免地从全局范围访问。想想 jQuery,你可以从 jQuery
或 $
全局变量访问它的函数。
// your-file.js
var myLib = {
hello: function() {
// code
}
}
然后包含your-file.js
,这样myLib
变量就全局可用了。然后您可以使用 myLib.hello()
从那里访问 hello
。或者您可以将 hello
设为全局 variable/function,但这真的很糟糕。
模块现在是最佳实践。由于NodeJs是基于CommonJS模块的,所以我使用Browserify to bring CommonJS modules client-side, and test everything with tape,它也是一个CommonJS模块。
我可以 运行 对 js 文件进行 jasmine 测试,但我似乎无法 运行 测试框架中的任何函数。
这是JS文件jasmine_test.js
$(document).ready(function() {
function hello(){
console.log("yo")
}
hello()
});
这里是 form_detail_spec.js
describe("tthe things", function(){
it("testing the things", function(){
var array = ["one"];
//isOptionalEmailForm(array);
//expect(isOptionalEmailForm(array)).toBe(true);
hello()
expect(1).toBe(1);
});
});
当我 运行 规范文件时,我在 jasmine 控制台中收到以下错误:
ReferenceError: hello is not defined
规范未通过。如果我从测试中删除 hello() ,它会很好地工作。
这里是 specrunner.html 文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec Runner v2.2.0</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.2.0/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine-2.2.0/jasmine.css">
<script type="text/javascript" src="../js/vendor/jquery/jquery-1.11.2.js"></script>
<script src="lib/jasmine-2.2.0/jasmine.js"></script>
<script src="lib/jasmine-2.2.0/jasmine-html.js"></script>
<script src="lib/jasmine-2.2.0/boot.js"></script>
<script type="text/javascript" src="../js/vendor/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript" src="../js/vendor/bootstrap/bootstrapValidator.min.js"></script>
<script type="text/javascript" src="../js/validator_parameters.js"></script>
<!-- include source files here... -->
<!-- <script src="src/Player.js"></script> -->
<!-- <script src="src/Song.js"></script> -->
<script src="../js/jasmine_test.js"></script>
<!-- include spec files here... -->
<!-- <script src="spec/SpecHelper.js"></script> -->
<!-- <script src="spec/PlayerSpec.js"></script> -->
<script src="spec/form_details_spec.js"></script>
</head>
<body>
</body>
</html>
函数hello
在另一个函数中。它不暴露于外界,因此您无法直接对其进行测试。将您的函数编写为模块非常好,例如 CommonJS、AMD 或新的 ES6 modules,然后测试这些模块。
这就是您使用 CommonJS/NodeJS
编写和访问模块的方式// hello.js
module.exports = hello; // export your function as a module
function hello() {
// code here
}
// test.js
var hello = require('./path/to/hello'); // you don't need to write the .js extension
// you can now call `hello()` in your test code here.
不太理想、更传统的方法是让您的 hello
函数可以通过某些不可避免地从全局范围访问。想想 jQuery,你可以从 jQuery
或 $
全局变量访问它的函数。
// your-file.js
var myLib = {
hello: function() {
// code
}
}
然后包含your-file.js
,这样myLib
变量就全局可用了。然后您可以使用 myLib.hello()
从那里访问 hello
。或者您可以将 hello
设为全局 variable/function,但这真的很糟糕。
模块现在是最佳实践。由于NodeJs是基于CommonJS模块的,所以我使用Browserify to bring CommonJS modules client-side, and test everything with tape,它也是一个CommonJS模块。