2

I am having problems writing a test. In general, all method calls inside of expect() fail with NullError. The same methods can be successfully called outside of expect(). Here is my main() method:

    ...

        import 'package:unittest/unittest.dart';
        import 'package:unittest/html_config.dart';


        void main() {  
          useHtmlConfiguration();

          test('URL connection is Ok for${repositoryURL} ', (){
              var httpRequest = new HttpRequest();
              expect(httpRequest.open('POST', repositoryURL), returnsNormally, reason:"httpRequestOpen for ${repositoryURL} threw exception");
          }); 
          //    httpRequest.open('POST', repositoryURL); // Works if not within the expect

          test('Repositories request is sent',(){
              expect (sendRepositoryListRequest(), returnsNormally, reason:"sendRepositoryListRequest threw exception");
          });   
           //sendRepositoryListRequest(); // works if not within the expect

Browser output:

FAIL 1  FAIL    Expectation: URL connection is Ok for../ServiceDirect/getRepositories . 
Expected: return normally Actual: <null> Which: threw W0: <NullError:  Cannot call "call$0" on null> 
httpRequestOpen for     ../ServiceDirect/getRepositories threw exception 
documentviewertest.dart.js 1224:3   dart.b     
documentviewertest.dart.js 7665:20  Gc.Is.JX 
documentviewertest.dart.js 7637:25  kw.xu 
documentviewertest.dart.js 7985:3   dart.vd 
documentviewertest.dart.js 6792:22  QA.call$0 
documentviewertest.dart.js 7776:30  c9.Sp 
documentviewertest.dart.js 7840:10  Rm.call$1 
documentviewertest.dart.js 2510:34  vs.GP 
documentviewertest.dart.js 2643:25  jb.call$0 
documentviewertest.dart.js 2456:26  T8 
2   FAIL    Expectation: Repositories request is sent. 
Expected: return normally Actual: <null> Which: threw W0: <NullError: Cannot call "call$0" on null> 
sendRepositoryListRequest threw exception  
documentviewertest.dart.js 1224:3   dart.b  
documentviewertest.dart.js 7665:20  Gc.Is.JX 
documentviewertest.dart.js 7637:25  kw.xu 
documentviewertest.dart.js 7985:3   dart.vd 
documentviewertest.dart.js 6796:22  Cv.call$0 
documentviewertest.dart.js 7776:30  c9.Sp 
documentviewertest.dart.js 7840:10  Rm.call$1 
documentviewertest.dart.js 2510:34  vs.GP 
documentviewertest.dart.js 2643:25  jb.call$0  
documentviewertest.dart.js 2456:26  T8 

Total 0 passed, 2 failed 0 errors

Output when running in DART (not browser)

    unittest-suite-wait-for-done
    FAIL: Testing URL connection for../ServiceDirect/getRepositories 
    Expected: return normally
    Actual: <null>
     Which: threw NoSuchMethodError:<The null object does not have a method 'call'.

  NoSuchMethodError : method not found: 'call'
  Receiver: null
  Arguments: []>
  httpRequestOpen for ../ServiceDirect/getRepositories threw exception

  package:unittest/src/simple_configuration.dart 137:7                                                             SimpleConfiguration.onExpectFailure
  package:unittest/src/simple_configuration.dart 15:28                                                             _ExpectFailureHandler.fail
  package:unittest/src/expect.dart 117:9                                                                           DefaultFailureHandler.failMatch
  package:unittest/src/expect.dart 75:29                                                                           expect
  documentviewertest.dart 606:13                                                                                   main.<fn>
  package:unittest/src/test_case.dart 111:31                                                                       _run.<fn>
  dart:async/future_impl.dart 453                                                                                  _Future._propagateToListeners.<fn>
  dart:async/zone.dart 683                                                                                         _rootRun
  dart:async/zone.dart 417                                                                                         _ZoneDelegate.run
  dart:async/zone.dart 627                                                                                         _CustomizedZone.run
  dart:async/future_impl.dart 445                                                                                  _Future._propagateToListeners
  dart:async/future_impl.dart 303                                                                                  _Future._complete
  dart:async/future_impl.dart 354                                                                                  _Future._asyncComplete.<fn>
  dart:async/zone.dart 688                                                                                         _rootRun
  dart:async/zone.dart 417                                                                                         _ZoneDelegate.run
  dart:async/zone.dart 627                                                                                         _CustomizedZone.run
  dart:async/zone.dart 538                                                                                         _BaseZone.runGuarded
  dart:async/zone.dart 563                                                                                         _BaseZone.bindCallback.<fn>
  dart:async/schedule_microtask.dart 18                                                                            _asyncRunCallback
  file:///E:/b/build/slave/dartium-win-full-stable/build/src/dart/tools/dom/src/native_DOMImplementation.dart 604  _handleMutation
FAIL: Repositories request is sent
  Expected: return normally
    Actual: <null>
     Which: threw NoSuchMethodError:<The null object does not have a method 'call'.

  NoSuchMethodError : method not found: 'call'
  Receiver: null
  Arguments: []>
  *** sendRepositoryListRequest threw exception ***

  package:unittest/src/simple_configuration.dart 137:7                                                             SimpleConfiguration.onExpectFailure
  package:unittest/src/simple_configuration.dart 15:28                                                             _ExpectFailureHandler.fail
  package:unittest/src/expect.dart 117:9                                                                           DefaultFailureHandler.failMatch
  package:unittest/src/expect.dart 75:29                                                                           expect
  documentviewertest.dart 613:14                                                                                   main.<fn>
  package:unittest/src/test_case.dart 111:31                                                                       _run.<fn>
  dart:async/future_impl.dart 453                                                                                  _Future._propagateToListeners.<fn>
  dart:async/zone.dart 683                                                                                         _rootRun
  dart:async/zone.dart 417                                                                                         _ZoneDelegate.run
  dart:async/zone.dart 627                                                                                         _CustomizedZone.run
  dart:async/future_impl.dart 445                                                                                  _Future._propagateToListeners
  dart:async/future_impl.dart 303                                                                                  _Future._complete
  dart:async/future_impl.dart 354                                                                                  _Future._asyncComplete.<fn>
  dart:async/zone.dart 688                                                                                         _rootRun
  dart:async/zone.dart 417                                                                                         _ZoneDelegate.run
  dart:async/zone.dart 627                                                                                         _CustomizedZone.run
  dart:async/zone.dart 538                                                                                         _BaseZone.runGuarded
  dart:async/zone.dart 563                                                                                         _BaseZone.bindCallback.<fn>
  dart:async/schedule_microtask.dart 18                                                                            _asyncRunCallback
  file:///E:/b/build/slave/dartium-win-full-stable/build/src/dart/tools/dom/src/native_DOMImplementation.dart 604  _handleMutation

0 PASSED, 2 FAILED, 0 ERRORS
Exception: Exception: Some tests failed.
  SimpleConfiguration.onDone (package:unittest/src/simple_configuration.dart:209:9)
  _completeTests@0x398acc1e (package:unittest/unittest.dart:663:17)
  _runTest@0x398acc1e (package:unittest/unittest.dart:612:19)
  _nextTestCase@0x398acc1e (package:unittest/unittest.dart:532:11)

Thank you, Yuri.

Yuri P.
  • 389
  • 2
  • 11

1 Answers1

0

this worked for me

expect(() => httpRequest.open('POST', repositoryURL), returnsNormally, reason:"httpRequestOpen for ${repositoryURL} threw exception");
Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567
  • Thank you, this worked for me as well. Do you think this a bug in unit test? – Yuri P. Mar 17 '14 at 17:06
  • Arguments like `repositoryURL` have no meaning inside expect. You have to pass the entire expression as a closure so that for example `httpReqeust.open()` can access the actual value of `repositoryURL` when `expect` executes it. It couldn't work any other way. – Günter Zöchbauer Mar 17 '14 at 17:10