2014-12-02 318 views
1

我在我的應用程序上運行'ember test --server',出現兩次失敗,我不知道它們爲什麼失敗。Ember測試失敗

從CLI:

> ToUrlHelper: it works 
>  ✘ Died on test #1  at eval (new-cms/tests/unit/helpers/to-url-test.js:10:5) 
>   at requireModule (http://localhost:7357/assets/vendor.js:70:29) 
>   at http://localhost:7357/assets/test-loader.js:14:29: undefined is not a function 

從Web瀏覽器:

> Died on test #1  at eval 
> (new-cms/tests/unit/helpers/to-url-test.js:10:5) 
>  at requireModule (http://localhost:7357/assets/vendor.js:70:29) 
>  at http://localhost:7357/assets/test-loader.js:14:29: undefined is not a function Source:  TypeError: undefined is not a function 
>  at Object.eval (new-cms/tests/unit/helpers/to-url-test.js:11:20) 
>  at Object.Test.run (http://localhost:7357/assets/test-support.js:1078:18) 
>  at http://localhost:7357/assets/test-support.js:1165:10 
>  at process (http://localhost:7357/assets/test-support.js:881:24) 
>  at http://localhost:7357/assets/test-support.js:470:5 

這是在對URL的test.js:

import { 
    toUrl 
} from 'new-cms/helpers/to-url'; 

module('ToUrlHelper'); 

// Replace this with your real tests. 
test('it works', function() { 
    var result = toUrl(42); 
    ok(result); 
}); 

從代碼實際幫手:

import Ember from 'ember'; 

export default Ember.Handlebars.makeBoundHelper(function(value) { 
    if(typeof(value) !== 'undefined') { 
     return value.replace(/\s+/g, '-').toLowerCase(); 
    } 
    return ''; 
}); 

回答

1

也許這不過是你將42傳遞給你的函數,然後試圖對其應用.replace函數。但是這個函數只能在字符串上定義...

首先傳入一個字符串,例如「hello me」而不是42,然後在另一個測試中傳遞42,查看您的測試中斷,因爲您的實現沒有考慮到這一點並修復您的實施。 (這是有點測試驅動開發)

+0

我使用的是ember-cli,它產生了測試,所以我不知道爲什麼數字'42'被傳遞。我應該刪除測試並使用cli重新創建它嗎? – Mithrilhall 2014-12-03 21:13:13

+0

嗯,我猜Ember cli只是爲你生成一個基本的測試,而不知道你的函數的實現。你的測試應該是「驗證」預期的行爲。在你的toUrl函數中,你不希望收到數字,而是字符串。然後,你的測試必須驗證意外,但「可能發生」行爲,因此你應該測試傳遞null,未定義,數字等......到你的函數中,並修改它的實現以避免它的破壞。 (這實際上就是發生在這裏的事情,燼哲提供了一個邊緣案例並破壞了你的代碼)。 – Sephy 2014-12-07 11:04:32

+0

如果這回答你的問題,請檢查它作爲正確的答案。這將驗證它。 – Sephy 2014-12-07 18:09:32