- tester模块
- tester原型
- assert()
- assertDoesntExist()
- assertEquals()
- assertEval()
- assertEvalEquals()
- assertElementCount()
- assertExists()
- assertFalsy()
- assertField()
- assertFieldName()
- assertFieldCSS()
- assertFieldXPath()
- assertHttpStatus()
- assertMatch()
- assertNot()
- assertNotEquals()
- assertNotVisible()
- assertRaises()
- assertSelectorDoesntHaveText()
- assertResourceExists()
- assertTextExists()
- assertTextDoesntExist()
- assertTitle()
- assertTitleMatch()
- assertType()
- assertInstanceOf()
- assertUrlMatch()
- assertVisible()
- assertAllVisible()
- begin()
- colorize()
- comment()
- done()
- error()
- fail()
- formatMessage()
- getFailures()
- getPasses()
- info()
- pass()
- renderResults()
- setUp()
- skip()
- tearDown()
tester模块
Casper附带一个测试器模块和一个Tester类,提供用于单元和功能测试的API。默认情况下,您可以通过任何Casper类实例的测试属性来访问此类的实例。
提示
学习如何使用Tester API并且看到它如何运作的最好方法可能是去看看CasperJS自己的测试套件。
tester原型
assert()
调用方法:assert(Boolean condition[, String message])
断言所提供的条件严格解决为布尔值ture。
casper.test.assert(true, "true's true");casper.test.assert(!false, "truth is out");
提示
同样也去看看类似的assertNot()函数。
assertDoesntExist()
调用方法: assertDoesntExist(String selector[, String message])
断言在远程DOM环境中不存在与提供的选择器表达式匹配的元素:
casper.test.begin('assertDoesntExist() tests', 1, function(test) {casper.start().then(function() {this.setContent('<div class="heaven"></div>');test.assertDoesntExist('.taxes');}).run(function() {test.done();});});
提示
同样也去看看类似的assertExists()函数。
assertEquals()
调用方法:assertEquals(mixed testValue, mixed expected[, String message])
断言两个值是严格等价的:
casper.test.begin('assertEquals() tests', 3, function(test) {test.assertEquals(1 + 1, 2);test.assertEquals([1, 2, 3], [1, 2, 3]);test.assertEquals({a: 1, b: 2}, {a: 1, b: 2});test.done();});
提示
同样也去看看类似的assertNotEquals()函数。
assertEval()
调用方法:assertEval(Function fn[, String message, Mixed arguments])
断言远程DOM中的代码评估严格解决为布尔值ture:
casper.test.begin('assertEval() tests', 1, function(test) {casper.start().then(function() {this.setContent('<div class="heaven">beer</div>');test.assertEval(function() {return __utils__.findOne('.heaven').textContent === 'beer';});}).run(function() {test.done();});});
assertEvalEquals()
调用方法: assertEvalEquals(Function fn, mixed expected[, String message, Mixed arguments])
断言远程DOM中的代码评估结果严格等于期望值:
casper.test.begin('assertEvalEquals() tests', 1, function(test) {casper.start().then(function() {this.setContent('<div class="heaven">beer</div>');test.assertEvalEquals(function() {return __utils__.findOne('.heaven').textContent;}, 'beer');}).run(function() {test.done();});});
assertElementCount()
调用方法: assertElementCount(String selector, Number count[, String message])
断言选择器表达式匹配给定数量的元素:
casper.test.begin('assertElementCount() tests', 3, function(test) {casper.start().then(function() {this.page.content = '<ul><li>1</li><li>2</li><li>3</li></ul>';test.assertElementCount('ul', 1);test.assertElementCount('li', 3);test.assertElementCount('address', 0);}).run(function() {test.done();});});
assertExists()
调用方法: assertExists(String selector[, String message])
断言在远程DOM环境中存在与提供的选择器表达式匹配的元素:
casper.test.begin('assertExists() tests', 1, function(test) {casper.start().then(function() {this.setContent('<div class="heaven">beer</div>');test.assertExists('.heaven');}).run(function() {test.done();});});
提示
同时建议你看看这个类似的函数assertDoesntExist()。
assertFalsy()
调用方法: assertFalsy(Mixed subject[, String message])
版本1.0新增
断言某个对象为假值。
提示
同时建议你看看这个类似的函数assertTruthy()。
assertField()
调用方法: assertField(String|Object input, String expected[, String message, Object options])
通过name属性或选择器表达式选定表单域,并断言给定的表单域的值和提供的值相同:
casper.test.begin('assertField() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {this.fill('form[name="gs"]', { q: 'plop' }, false);test.assertField('q', 'plop');}).run(function() {test.done();});});// Path usage with type 'css'casper.test.begin('assertField() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {this.fill('form[name="gs"]', { q: 'plop' }, false);test.assertField({type: 'css', path: '.q.foo'}, 'plop');}).run(function() {test.done();});});
版本1.0新增
该方法也可以使用在select,textarea等文本域中了。
版本1.1新增
options参数允许设置与ClientUtils#getFieldValue()一起使用的选项。
输入参数将检测是否传入一个type与xpath或css和与它一起指定的属性路径。
assertFieldName()
调用方法: assertFieldName(String inputName, String expected[, String message, Object options])
版本1.1-beta3新增
断言给定的表单域具有提供的值。
casper.test.begin('assertFieldName() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {this.fill('form[name="gs"]', { q: 'plop' }, false);test.assertFieldName('q', 'plop', 'did not plop', {formSelector: 'plopper'});}).run(function() {test.done();});});
assertFieldCSS()
调用方法:assertFieldCSS(String cssSelector, String expected, String message)
版本1.1新增
断言给定的表单字段具有给定的CSS选择器提供的值
casper.test.begin('assertFieldCSS() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {this.fill('form[name="gs"]', { q: 'plop' }, false);test.assertFieldCSS('q', 'plop', 'did not plop', 'input.plop');}).run(function() {test.done();});});
assertFieldXPath()
调用方法:assertFieldXPath(String xpathSelector, String expected, String message)
版本1.1新增
断言给定的表单域具有提供给XPath选择器的值:
casper.test.begin('assertFieldXPath() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {this.fill('form[name="gs"]', { q: 'plop' }, false);test.assertFieldXPath('q', 'plop', 'did not plop', '/html/body/form[0]/input[1]');}).run(function() {test.done();});});
assertHttpStatus()
调用方法:assertHttpStatus(Number status[, String message])
断言当前的HTTP状态代码与作为参数传递的状态代码相同:
casper.test.begin('casperjs.org is up and running', 1, function(test) {casper.start('http://casperjs.org/', function() {test.assertHttpStatus(200);}).run(function() {test.done();});});
assertMatch()
调用方法:assertMatch(mixed subject, RegExp pattern[, String message])
断言所提供的字符串与提供的JavaScript RegExp模式匹配:
casper.test.assertMatch('Chuck Norris', /^chuck/i, 'Chuck Norris\' first name is Chuck');
提示
建议你也去看看类似的assertUrlMatch()和assertTitleMatch()函数。
assertNot()
调用方法:assertNot(mixed subject[, String message])
断言传入的对象为一个假值(falsy)。
casper.test.assertNot(false, "Universe is still operational");
assertNotEquals()
调用方法:assertNotEquals(mixed testValue, mixed expected[, String message])
版本0.6.7新增
断言两个值非严格相等。
casper.test.assertNotEquals(true, "true");
assertNotVisible()
调用方法:assertNotVisible(String selector[, String message])
断言匹配提供的选择器表达式的元素不可见:
casper.test.begin('assertNotVisible() tests', 1, function(test) {casper.start().then(function() {this.setContent('<div class="foo" style="display:none>boo</div>');test.assertNotVisible('.foo');}).run(function() {test.done();});});
assertRaises()
调用方法:assertRaises(Function fn, Array args[, String message])
断言用给定的参数调用提供的函数引发一个javascript错误:
casper.test.assertRaises(function(throwIt) {if (throwIt) {throw new Error('thrown');}}, [true], 'Error has been raised.');casper.test.assertRaises(function(throwIt) {if (throwIt) {throw new Error('thrown');}}, [false], 'Error has been raised.'); // fails
assertSelectorDoesntHaveText()
调用方法:assertSelectorDoesntHaveText(String selector, String text[, String message])
断言给定的文本在所有与提供的选择器表达式匹配的元素中不存在:
casper.test.begin('assertSelectorDoesntHaveText() tests', 1, function(test) {casper.start('http://google.com/', function() {test.assertSelectorDoesntHaveText('title', 'Yahoo!');}).run(function() {test.done();});});
assertResourceExists()
调用方法:assertResourceExists(Function testFx[, String message])
testFx函数针对所有加载的资源执行,当至少有一个资源匹配时测试通过:
casper.test.begin('assertResourceExists() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertResourceExists(function(resource) {return resource.url.match('logo3w.png');});}).run(function() {test.done();});});
简写版:
casper.test.begin('assertResourceExists() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertResourceExists('logo3w.png');}).run(function() {test.done();});});
提示
去看看这个类似的Casper.resourceExists()函数吧.
assertTextExists()
调用方法:assertTextExists(String expected[, String message])
断言body标签的文本中含有给定的字符串:
casper.test.begin('assertTextExists() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertTextExists('google', 'page body contains "google"');}).run(function() {test.done();});});
assertTextDoesntExist()
调用方法:assertTextDoesntExist(String unexpected[, String message])
版本1.0新增 断言body标签的文本中不含有给定的字符串:
casper.test.begin('assertTextDoesntExist() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertTextDoesntExist('bing', 'page body does not contain "bing"');}).run(function() {test.done();});});
assertTitle()
调用方法:assertTitle(String expected[, String message])
断言远程页面的标题等于预期的标题:
casper.test.begin('assertTitle() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertTitle('Google', 'google.fr has the correct title');}).run(function() {test.done();});});
assertTitleMatch()
调用方法:assertTitleMatch(RegExp pattern[, String message])
断言远程页面的标题与提供的RegExp模式匹配:
casper.test.begin('assertTitleMatch() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertTitleMatch(/Google/, 'google.fr has a quite predictable title');}).run(function() {test.done();});});
assertType()
调用方法:assertType(mixed input, String type[, String message])
断言提供的输入是给定的类型:
casper.test.begin('assertType() tests', 1, function suite(test) {test.assertType(42, "number", "Okay, 42 is a number");test.assertType([1, 2, 3], "array", "We can test for arrays too!");test.done();});
注意
类型名称总是以小写字母表示。
assertInstanceOf()
调用方法:assertInstanceOf(mixed input, Function constructor[, String message])
版本1.1新增
断言所提供的输入属于给定构造函数的:
function Cow() {this.moo = function moo() {return 'moo!';};}casper.test.begin('assertInstanceOf() tests', 2, function suite(test) {var daisy = new Cow();test.assertInstanceOf(daisy, Cow, "Ok, daisy is a cow.");test.assertInstanceOf(["moo", "boo"], Array, "We can test for arrays too!");test.done();});
assertUrlMatch()
调用方法:assertUrlMatch(Regexp pattern[, String message])
断言当前页面的url匹配提供的RegExp模式:
casper.test.begin('assertUrlMatch() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertUrlMatch(/^http:\/\//, 'google.fr is served in http://');}).run(function() {test.done();});});
assertVisible()
调用方法:assertVisible(String selector[, String message])
断言至少有一个与提供的选择器表达式匹配的元素是可见的:
casper.test.begin('assertVisible() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertVisible('h1');}).run(function() {test.done();});});
assertAllVisible()
调用方法:assertAllVisible(String selector[, String message])
断言所有匹配提供的选择器表达式的元素都是可见的:
casper.test.begin('assertAllVisible() tests', 1, function(test) {casper.start('http://www.google.fr/', function() {test.assertAllVisible('input[type="submit"]');}).run(function() {test.done();});});
begin()
调用方法:
- begin(String description, Number planned, Function suite)
- begin(String description, Function suite)
- begin(String description, Number planned, Object config)
- begin(String description, Object config)
版本1.1新增
开始一个<planned>测试套件,套件回调将获取当前的Tester实例作为其第一个参数:
function Cow() {this.mowed = false;this.moo = function moo() {this.mowed = true; // mootable state: don't do thatreturn 'moo!';};}// unit style synchronous test casecasper.test.begin('Cow can moo', 2, function suite(test) {var cow = new Cow();test.assertEquals(cow.moo(), 'moo!');test.assert(cow.mowed);test.done();});
提示
planned参数是特别有用的,以防给定的测试脚本突然中断,让你没有明显的方式知道它和一个错误的成功状态。
一个更异步的例子:
casper.test.begin('Casperjs.org is navigable', 2, function suite(test) {casper.start('http://casperjs.org/', function() {test.assertTitleMatches(/casperjs/i);this.clickLabel('Testing');});casper.then(function() {test.assertUrlMatches(/testing\.html$/);});casper.run(function() {test.done();});});
重要提示
done()必须被调用才能终止套件。在进行异步测试时,这是特别重要的,所以确保在所有事情都被执行时调用它。
Tester#begin()也接受一个测试配置对象,所以你可以添加setUp()和tearDown()方法:
// cow-test.jscasper.test.begin('Cow can moo', 2, {setUp: function(test) {this.cow = new Cow();},tearDown: function(test) {this.cow.destroy();},test: function(test) {test.assertEquals(this.cow.moo(), 'moo!');test.assert(this.cow.mowed);test.done();}});
colorize()
调用方法:colorize(String message, String style)
呈现彩色输出。基本上是Casper.Colorizer#colorize()的代理方法。
comment()
调用方法:comment(String message)
将注释式格式的消息写入stdout:
casper.test.comment("Hi, I'm a comment");
done()
调用方法:done()
版本1.1改动:planned参数已被弃用
标记一个以begin()开头的测试套件作为处理过程:
casper.test.begin('my test suite', 2, function(test) {test.assert(true);test.assertNot(false);test.done();});
异步写法:
casper.test.begin('Casperjs.org is navigable', 2, function suite(test) {casper.start('http://casperjs.org/', function() {test.assertTitleMatches(/casperjs/i);this.clickLabel('Testing');});casper.then(function() {test.assertUrlMatches(/testing\.html$/);});casper.run(function() {test.done();});});
error()
调用方法:error(String message)
向stdout写入错误式格式的消息:
casper.test.error("Hi, I'm an error");
fail()
调用方法:fail(String message [, Object option])
将失败的测试条目添加到堆栈:
casper.test.fail("Georges W. Bush");casper.test.fail("Here goes a really long and expressive message", {name:'shortfacts'});
formatMessage()
调用方法:formatMessage(String message, String style)
格式化消息以突出显示其中的某些部分。只在tester内部使用。
getFailures()
调用方法:getFailures()
版本1.0新增
版本1.1后弃用
检索当前测试套件的失败:
casper.test.assertEquals(true, false);require('utils').dump(casper.test.getFailures());casper.test.done();
会返回给你这样的信息:
$ casperjs test test-getFailures.jsTest file: test-getFailures.jsFAIL Subject equals the expected value# type: assertEquals# subject: true# expected: false{"length": 1,"cases": [{"success": false,"type": "assertEquals","standard": "Subject equals the expected value","file": "test-getFailures.js","values": {"subject": true,"expected": false}}]}FAIL 1 tests executed, 0 passed, 1 failed.Details for the 1 failed test:In c.js:0assertEquals: Subject equals the expected value
提示
在版本1.1中,你可以通过监听测试失败事件记录测试失败:
var failures = [];casper.test.on("fail", function(failure) {failures.push(failure);});
getPasses()
调用方法:getPasses()
版本1.0新增
版本1.1后弃用
检索当前测试套件中成功测试用例的报告:
casper.test.assertEquals(true, true);require('utils').dump(casper.test.getPasses());casper.test.done();
会返回给你这样的信息:
$ casperjs test test-getPasses.jsTest file: test-getPasses.jsPASS Subject equals the expected value{"length": 1,"cases": [{"success": true,"type": "assertEquals","standard": "Subject equals the expected value","file": "test-getPasses.js","values": {"subject": true,"expected": true}}]}PASS 1 tests executed, 1 passed, 0 failed.
提示
在版本1.1中,您可以通过听取测试成功事件来记录测试成功:
var successes = [];casper.test.on("success", function(success) {successes.push(success);});
info()
调用方法:info(String message)
将信息样式格式的消息写入标准输出:
casper.test.info("Hi, I'm an informative message.");
pass()
调用方法:pass(String message)
将成功的测试条目添加到堆栈中:
casper.test.pass("Barrack Obama");
renderResults()
调用方法:renderResults(Boolean exit, Number status, String save)
渲染测试结果,将结果保存在一个XUnit格式的文件中,并可以选择退出phantomjs:
casper.test.renderResults(true, 0, 'test-results.xml');
提示
在使用casperjs测试命令(请参阅测试文档)时,不会调用此方法,它会自动为您执行。
setUp()
调用方法:setUp([Function fn])
定义一个在使用begin()定义的每个测试之前执行的函数:
casper.test.setUp(function() {casper.start().userAgent('Mosaic 0.1');});
要执行异步操作,请使用done参数:
casper.test.setUp(function(done) {casper.start('http://foo').then(function() {// ...}).run(done);});
警告
如果您不打算异步使用该方法,则不要指定done参数。
skip()
调用方法:skip(Number nb, String message)
跳过给定数量的计划测试:
casper.test.begin('Skip tests', 4, function(test) {test.assert(true, 'First test executed');test.assert(true, 'Second test executed');test.skip(2, 'Two tests skipped');test.done();});
tearDown()
调用方法:tearDown([Function fn])
定义一个在使用begin()定义的每个测试之后执行的函数:
casper.test.tearDown(function() {casper.echo('See ya');});
要执行异步操作,请使用done参数:
casper.test.tearDown(function(done) {casper.start('http://foo/goodbye').then(function() {// ...}).run(done);});
警告
如果您不打算异步使用该方法,则不要指定done参数。
