3

我正在使用版本 3.4.0

我对 YUI.Test 断言有一个奇怪的问题。这是示例:

YUI().use('test', 'node', 'node-event-simulate',
    function(Y) {
        var runner = Y.Test.Runner;

        var someTestCase = new Y.Test.Case({
            name    : 'SomeMeaningfulName',

            setUp       : function() {
                var test = this;

                // create show details link
                test.Y$aLink    = Y.Node
                                    .create('<a href="//some.fake.url.ie">Show details</a>');

                Y.one('body')
                    .append(test.Y$aLink);                        
            }, 

            tearDown    : function() {
                this.Y$aLink.remove();
            },

            testEventListener : function() {
                var test = this;

                test.Y$aLink
                    .on('click', function(e) {
                        e.preventDefault();

                        // this codes works
                        console.log('on click event');

                        // this one doesn't fail
                        // it "works" perfectly when it's outside of the callback
                        Y.assert(false, 'false is true');
                    });

                test.Y$aLink.simulate('click');
            }
        });

        runner.add(someTestCase);
        runner.run();
    });

断言在事件回调中时永远不会失败:(文档没有提到这种情况......

也许我做错了什么,但缺乏文档使得很难确定......

更新

没有等待/恢复的例子:http: //jsfiddle.net/op1ekun/Fgra6/2/

还有一个等待/恢复 http://jsfiddle.net/op1ekun/Fgra6/5/

更新2

已经报道了一个类似的案例,它涉及异步测试问题,但这不是我的问题:http: //yuilibrary.com/projects/yuitest/ticket/74

更新3

这似乎正是我正在经历的,看起来比利已经提出了一个解决方案,有趣的是使用依赖注入,它可能值得一试: http ://csausdev.wordpress.com/2011/02/12 /unit-testing-callbacks-with-yui-test/

请帮忙!谢谢!

4

1 回答 1

1

YUI Test 有一个等待和恢复机制,您可以在这种情况下利用。你告诉它等到一个resume方法被调用,然后该resume方法接受一个回调,你可以安全地做出断言。在您的情况下,它看起来像这样:

'test event listener': function () {
  var test = this;

  test.Y$aLink.on('click', function (e) {
    e.preventDefault();

    test.resume(function () {
      Assert.fail('ouch!');
    });
  });

  test.wait();
  test.Y$aLink.simulate('click');
}
于 2013-08-09T12:49:54.313 回答