2015-04-04 88 views
1

我的综合测试:如何在JPM测试断言

exports.testAssertObject = function(assert) { 
    console.log(arguments); 
    assert.ok(assert, "Assert object exists"); 
}; 

在JPM失败TypeError: assert.ok is not a function

$jpm --version 
0.0.29 
$jpm test 
JPM undefined Starting jpm test on Reuse Tab 
Creating XPI 
JPM undefined XPI created at ...\AppData\Local\Temp\[email protected] (327ms) 
Created XPI at ...\AppData\Local\Temp\[email protected] 
JPM undefined Creating a new profile 
Running tests on Firefox 38.0a2/Gecko 38.0a2 ({ec8030f7-c20a-464f-9b0e-13a3a9e97384}) under winnt/x86. 
console.log: reusetab: {"0":{"console":{},"passed":0,"failed":0,"testRunSummary":[],"expectFailNesting":0,"test":{"name":"./test/test-utils.testAssertObject","passed":0,"failed":0,"errors":{},"last":"START"},"isDone":false,"waitTimeout":null}} 
console.error: reusetab: 
JPM undefined Message: ReferenceError: assert is not defined 
    Stack: 
    [email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-k8e1vrohvmoxwq-at-jetpack/test/test-utils.js:3:2 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/deprecated/unit-test.js:559:7 
startMany/runNextTest/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/deprecated/unit-test.js:522:11 
[email protected]://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:867:23 
[email protected]://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:746:7 
this.PromiseWalker.scheduleWalkerLoop/<@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:688:37 



0 of 1 tests passed. 
There were test failures... 

我假定,unlike cfx,JPM没有通过assert object的测试方法参数?

如何执行断言和notify "done" in async tests

回答

1

及最新的断言方法列表,阅读

资源://gre/modules/commonjs/sdk/deprecated/unit-test.js

测试方法的第一个参数是TestRuner对象中实现该资源,并具有不同的接口:

特别是:

  • ok()方法被替换为assert()
  • throws()被替换为assertRaises(func, predicate, message)(不同的签名)
  • equal()被替换assertEqual(),很多其他方法也与前缀“断言”
  • done()方法现在属于TestRunner的太(你的测试方法没有第二个参数)对TestRunner的
2

JPM声明你的方法异步调用waitUntilDone(timeoutInMs)(如CFX)默认情况下不运行带有断言方法测试,而是使用了测试工具的旧版本磨他们。所有你需要做的,使用目前的测试工具是加

require("sdk/test").run(exports); 

您trsts文件,你链接的单元测试页面上记录。