Andrey (azangru) wrote,
Andrey
azangru

Вопль

Пишу для ангулярского контроллера тест. Допустим, дурацкий, но все-таки. Тестируется асинхронное событие. Контроллер вызовет функцию и через некоторое время в scope этого контроллера будет

$scope.member = {что-то-там-внутри};

Контроллер зависит от фабрики Home, у которой есть функция getMember. Она асинхронная. Делаю мок этой функции:

var Home = {
  getMember: function(id){
    return Promise.resolve({
      "id":300065,
      "firstname":"John",
      "lastname":"Smith"
    });
  }
};


Перехожу к тесту (в Mocha). Мока, как про нее пишут, умеет обращаться с асинхронными функциями. Ну, я, значит, и пишу:

it("assigns an object to $scope.member", function(done){
  Home.getMember(1).then(function(result){
    expect(scope.member).to.eql({
      "id":300065,
      "firstname":"John",
      "lastname":"Smith"
    });
    done();
    });
});


И — фиг. Не работает — пишет: "Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test". Хотя я вызываю этот done callback. Более того, если вместо Home.getMember(1) написать Promise.resolve(1) (просто чтобы обещание создалось), то вот так работает:

it("assigns an object to $scope.member", function(done){
  Promise.resolve(1).then(function(result){
    expect({a: 1}).to.eql({a: 1});
    done();
   });
});



а вот так — ругается на тот же самый таймаут:

it("assigns an object to $scope.member", function(done){
  Promise.resolve(1).then(function(result){
    expect(scope.member).to.eql({a: 1});
    done();
  });
});


Откуда у Моки проблема с ангулярской scope (которая $scope), почему она ругается — ума не приложу.

Не то чтобы тест был важный, да и переписался он с использованием chai-as-promised, но елки-палки, как такое может быть, что с одним объектом — {a: 1} — тест работает, а с другим — scope.member — вылетает и жалуется на то, что коллбэк не вызвали.
Subscribe

  • (no subject)

    Also, Google's documentation style guide. With the latest trends about the correct language, obvi. This one via HN.

  • (no subject)

    Google's document on how they build Chrome dev tools with web components. And yeah, it includes a special dance for some semblance of type safety,…

  • (no subject)

    On the ideology in the industry: A guest on a podcast: There was a thread on Twitter the other day, with Adam Rackis, and he had made a comment…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 11 comments

  • (no subject)

    Also, Google's documentation style guide. With the latest trends about the correct language, obvi. This one via HN.

  • (no subject)

    Google's document on how they build Chrome dev tools with web components. And yeah, it includes a special dance for some semblance of type safety,…

  • (no subject)

    On the ideology in the industry: A guest on a podcast: There was a thread on Twitter the other day, with Adam Rackis, and he had made a comment…