Утверждение вызова метода jsMockito не работает должным образом - PullRequest
1 голос
/ 23 мая 2011

У меня проблемы с выполнением некоторых утверждений вызова метода при тестировании объекта Javascript с помощью QUnit + JsMockito.Базовая инфраструктура работает нормально: Qunit, JsHamcrest (зависимость Jsmockito) и Jsmockito правильно инициализируются в определении набора.

Я хочу объявить вызов метода «dataStore # create» с объектом в качестве аргумента,следующим образом:

var store = {create: function(arg) {}};

test("save()", function() {
  var dataStoreMock = mock(store);

  var objectUnderTest = { value: 'aaa',
                        dataStore: dataStoreMock,
                        save: function() {this.dataStore.create({name: this.value});}}

objectUnderTest.save();
verify(dataStoreMock).create({name: 'aaa'});
});

Я получаю ошибку утверждения: «Требуется, но не вызывается: obj.create (равно [объектный объект])» *

Мой первый подозрение заключается в том, что равенство объектов нене работает, как я ожидал, доказательство того, что утверждение работает при использовании на вызовах, которые передают примитивные типы данных вместо объектов:

this.dataStore.create(this.value); //actual code
verify(dataStoreMock).create('aaa'); //test

Я пытался использовать jsHamcrest 'equalTo'matcher (как показано в jsMockito docs) также безуспешно:

verify(dataStoreMock).create(equalTo({name: 'aaa'}));

У кого-нибудь есть идеи о том, как заставить работать такого рода утверждение?

1 Ответ

1 голос
/ 24 мая 2011

Утверждение проверяет сам объект, а не его атрибуты, и сопоставитель «equalTo» JsHamcrest не выполняет глубокую проверку объектов (он аналогичен оператору javascript '==').

Вы можете просто проверить, что это объект:

verify(dataStoreMock).create(object());

или имеется JSHamcrest matcher 'hasMember', который вы можете использовать как:

verify(dataStoreMock).create(hasMember('name'));

Если вы используете jshamcrest 0.6.4 или новее (или текущий HEAD), вы также можете проверить член, передав совпадения в качестве второго аргумента hasMember:

verify(dataStoreMock).create(hasMember('name', 'aaa'));
verify(dataStoreMock).create(hasMember('name', equalTo('aaa')));
...