2016-07-26 18 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的要點。

相關問題