2016-01-05 4 views
1

Я пытаюсь выразить что-то вроде следующего:Каков синтаксис для выполнения пользовательского теста после выполнения обещания с should.js?

it("should use the 'text' mode",() => { 
    let usedMockMode = false; 

    let env = new Environment(); 
    let mockMode = { parse:() => usedMockMode = true }; 
    env.modes.set("text", mockMode); 

    return env.parseContent("foo", "text") 
     .should.eventually.be.true(() => usedMockMode); 
         // ^--------------------------^ 
         //  Pseudo-code 
}) 

Есть ли способ для достижения этой цели?

+0

Какая у вас основа для тестирования (ака, откуда взялась ваша «она»)? мокко? Жасмин? что-то другое? Большинство из них поддерживают параметр для функции, начинающейся с вашей первой строки. –

+0

@ Aᴍɪʀ: это структура утверждения. –

+1

@ PatrickJ.S. Я использую среду тестирования mocha.js, и в некоторых случаях я использую модуль «mocha-testdata», который позволяет передавать данные для многих тестовых итераций через аргументы моей тестовой функции 'it'. –

ответ

0

После некоторых проб и ошибок я в конце концов обнаружил, что следующие работы:

it("should use the 'text' mode",() => { 
    let usedMockMode = false; 

    let env = new Environment(); 
    let mockMode = { parse:() => usedMockMode = true }; 
    env.modes.set("text", mockMode); 

    return env.parseContent("foo", "text") 
     .then(() => { 
      usedMockMode.should.be.true(); 
     }); 
}) 

Это, похоже, не очень интуитивным для меня, так как есть, очевидно, какая-то магия за кулисами, чтобы привязать утверждение в контексте теста.

+0

Вы используете обычный синтаксис обещания. это не имеет никакого отношения к утверждению. С '. Then' вы создаете новое обещание, которое будет исполнено _after_ обещание' parseContent' разрешено. –

0

У меня не было нового узла и мокки под рукой. но он также должен работать со стрелками.

describe('promise fn', function(){ 
    it('should fullfill a promise', function(done){ 
    … 
    return env.parseContent('foo', 'bar').then(function(){ 
     (usedMockMode).should.be.true}) 
     .finally(done); 
    }); 
}) 
+0

Это, кажется, не работает для меня. Тест зависает в течение 2000 мс, а затем он выдает ошибочную ошибку, указывающую, что вызов «done» должен был быть вызван тестом. Даже если я просто вызываю 'done();' непосредственно после утверждения; он все еще висит. Даже когда я удаляю ключевое слово return из обещания. Я, вероятно, делаю глупую ошибку ... но это, безусловно, не работает для меня:/ –