2016-07-26 21 views
0

使用磁带时,如何编写自定义断言方法来代替t.equal()?还是有一个测试断言方法,可以检查一个子字符串,使我测试的整个字符串不必逐字比较使用t.deepEqual()如何使用磁带写测试节点或javascript的定制断言,或检查子字符串而不是t.deepEquals()?

var test = require("tape") 

test('messages contain key words', function (t) { 
    // this is what I'm using: 
    t.equal(MyEncode(Fruit).indexOf('eat more') > -1,true,'should contain "eat more"') 

    // this is what I want: 
    t.contains(myEncode(Fruit),'eat more','should contain "eat more"') 
    t.end() 
}) 

当我测试myEncode,我可以看到,该字符串不包含子,而是因为它仅评估为,这不是信息我无法查看实际值:

not ok 1 should contain "eat more" 
--- 
    operator: equal 
    expected: true 
    actual: false 
    at: checkCmd (/test.js:63:11) 
... 

通过阅读上面的测试输出,我不知道我的测试是否过于严格,或者输出实际上是不正确的。相反,我想看到myEncode返回加快定位问题的实际值:

not ok 2 should contain "eat more" 
--- 
    operator: contains 
    expected: "eat more" 
    actual: "Apples are allowed to be eaten on weekdays and weekends" 
    at: checkCmd (/test.js:66:11) 
... 
+0

我安装了[extend-tape](https://www.npmjs.com/package/extend-tape),但事实证明它需要'import'函数,而V8还不支持'import'函数,所以从'磁带'进口磁带;从'extend-tape'导入addAssertions;'不起作用。 – user6641586

回答

0

我得到它的工作,感谢在github上tape问题How to define new test methods? #154 @mbostock例如测试方法。

功能进行测试,通常在另一个文件(如appToTest.js)

function brownFox(argument) { 
    return "The "+argument+" fox jumped" 
} 
exports.brownFox = brownFox 

测试脚本:

// Test module typically named test.js 
var test = require("tape") 

var f = require("./appToTest") 
// regular built-in test 

test('String must match exactly', function (t) { // can be too specific 
    t.deepEqual(f.brownFox('quick brown'), "The quick brown fox jumped") // should pass 
    t.deepEqual(f.brownFox('quick black'), "The quick brown fox jumped") // will fail 
    t.deepEqual(f.brownFox('quick white'), "The quick white fox jumped") // should pass 
    t.comment('Strings must be fully specified to match word for word') 
    t.end() 
}) 
// It can be too tedious to maintain the test string to always 
// match exactly the string in the code being tested 

// I don't care what the fox is as long as it jumped 
// Since there is no "contains" test in tape, I hack t.equal() 
test('String should contain a fox', function (t) { 
    // does not show actual value when test fails; shows true or false instead 
    // "jumped" must be tediously repeated to know what the test is about 
    t.equal(f.brownFox('quick brown').indexOf("jumped") > -1, true, "contains jumped") // should pass 
    t.equal(f.brownFox('quick black').indexOf("junped") > -1, true, "contains jumped") // should fail 
    t.comment('failures are not descriptive') 
    t.end() 
}) 
// Using equal() can result in more time spent fixing or adjusting the test 
// than coding the application 

// So define your own tape test method 
/////////////// Example of defining a custom tape test method 
test.Test.prototype.stringContains = function(actual, contents, message) { 
    this._assert(actual.indexOf(contents) > -1, { 
    message: message || 'should contain '+contents, 
    operator: 'stringContains', 
    actual: actual, 
    expected: contents 
    }); 
}; 

/////////////// Example using a custom tape test method 
test('String should contain a fox', function (t) { 
    // shows actual value when test fails 
    t.stringContains(f.brownFox('quick brown'), "jumped") // should pass 
    t.stringContains(f.brownFox('quick brown'), "junped") // should fail 
    // still supports custom message to override default message: 
    t.stringContains(f.brownFox('quick brown'), "jumped", 'must contain "jumped"') // should pass 
    t.stringContains(f.brownFox('quik white'), "jumped") // should pass 
    t.comment('failures are more descriptive') 
    t.end() 
}) 

注意,定制的测试输出现在报告的“实际”串:

TAP version 13 
# String must match exactly 
ok 1 should be equivalent 
not ok 2 should be equivalent 
    --- 
    operator: deepEqual 
    expected: 'The quick brown fox jumped' 
    actual: 'The quick black fox jumped' 
    at: Test.<anonymous> (./tape-test.js:9:7) 
    ... 
ok 3 should be equivalent 
# Strings must be fully specified to match word for word 
# String should contain a fox 
ok 4 contains jumped 
not ok 5 contains jumped 
    --- 
    operator: equal 
    expected: true 
    actual: false 
    at: Test.<anonymous> (./tape-test.js:23:7) 
    ... 
# failures are not descriptive 
# String should contain a fox 
ok 6 should contain jumped 
not ok 7 should contain junped 
    --- 
    operator: stringContains 
    expected: 'junped' 
    actual: 'The quick brown fox jumped' 
    at: Test.test.Test.stringContains (./tape-test.js:33:8) 
ok 8 must contain "jumped" 
ok 9 should contain jumped 
# failures are more descriptive 

1..9 
# tests 9 
# pass 6 
# fail 3 

我安装extend-tape,然后意识到我会有将其与babel一起使用,因为V8不支持导入,但我不想将babel作为依赖项添加。

由于上面的代码有效,我没有看到使用extend-tape的要点。

相关问题