2016-09-15 2 views
1

Использование Quinit's throw() Утверждение Я хочу проверить, что выдается ошибка, и сообщение об ошибке. У меня есть следующие функции:Правильное использование утверждения QUnit throw()?

/** 
* Error function for Node. 
* @param {String} msg Error message. 
*/ 
function NodeError (msg) { 
    var that = this 

    /** 
    * Attribute for message. 
    * @type {String} 
    */ 
    this.msg = msg 

    /** 
    * Function rendering NodeError as a string. 
    * @return {String} String representation of NodeError. 
    */ 
    this.toString = function() { 
    return that.msg 
    } 
} 

/** 
* Node object. TODO Fill out. 
* @param {String} title Node title. 
* @throws {NodeError} If no title given 
*/ 
function Node (title) { 
    var that = this 

    if (!title) { 
    throw new Error('Error: no title given') 
    } 

    /** 
    * Node title 
    * @type {[type]} 
    */ 
    this.title = title 
} 

И следующий QUnit тест:

QUnit.test('new Node w/o title throws error', function (assert) { 
    assert.expect(1) // Expected number of assertions 

    assert.throws(
    function() { new Node() }, 
    function (err) { err.toString() === 'Error: no title given' }, 
    'Error thrown' 
) 
}) 

Однако тесты блок не дает этого:

Error [email protected] 0 ms 
Expected: 
function(a){ 
    [code] 
} 
Result:  
Error("Error: no title given") 
Diff: 
function(a){ 
    [code] 
}Error("Error: no title given") 
Source:  
    at Object.<anonymous> (file:///Users/maasha/install/src/protwiz/test/test_pw_node.js:10:10) 

Что делать?

ответ

1

Вторая функция, которую вы передаете assert.throws, должна return что-то. В настоящее время у вас есть оператор, который вычисляет значение boolean, но результат отбрасывается. Затем функция returns implicitly, thus returning undefined.

Кроме того, вы бросаете new Error(...), а не NodeError. Вам нужно либо изменить это, либо просто использовать err.message.

Вот фиксированная версия:

function NodeError (msg) { 
 
    var that = this; 
 
    this.msg = msg; 
 
    this.toString = function() { 
 
    return that.msg; 
 
    } 
 
} 
 

 
function Node (title) { 
 
    var that = this; 
 

 
    if (!title) { 
 
    throw new NodeError('Error: no title given'); // <- CHANGED 
 
    } 
 

 
    this.title = title; 
 
} 
 

 

 
QUnit.test('new Node w/o title throws error', function (assert) { 
 
    assert.expect(1); 
 

 
    assert.throws(
 
    function() { new Node(); }, 
 
    function (err) { return err.toString() === 'Error: no title given' }, // <- CHANGED 
 
    'Error thrown' 
 
); 
 
})
<link href="https://cdnjs.cloudflare.com/ajax/libs/qunit/1.16.0/qunit.min.css" rel="stylesheet"/> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/qunit/1.16.0/qunit.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular.js"></script> 
 
<div id="qunit"></div>

Вы можете посмотреть в использовании инструмент пылеобразования, который мог бы поймать эту проблему, а также другие (например, у вас есть много недостающих полуколоний, что может привести к unexpected results).

+0

Спасибо, ты дорогая! – maasha

Смежные вопросы