Я хотел бы протестировать заводской метод, который запускает $ resource. Мой тест будет издеваться над реальным бэкэндом, которого еще нет.Как насмехаться с бэкэндом для приложения angularjs?
Вот пример кода завода:
app.factory('Global', function($resource){
var Jogas = $resource('/jogasok/:id', {'id': '@id'}, {
'ujBerlet': {'method': 'POST', 'params': {'berlet': true}}
});
var jogasok = Jogas.query();
return {
getJogasok: function() {
return jogasok;
}
};
})
Мой тест будет проверить, что запрос был сделан.
Если я инициализировать мое приложение с:
app.run(function run ($httpBackend) {
$httpBackend.whenGET('/jogasok').respond([
{id: 1, name: 'asdfasdf'},
{id: 2, name: '2wrerwert'}
]);
})
и откройте приложение в браузере, то кажется, что все будет хорошо, у меня есть фиктивные данные в браузере.
Но, когда я вынимаю код запуска выше и пишу тест, все просто не работает.
describe('Global Service: ', function() {
beforeEach(module('bkJoga'));
beforeEach(inject(function($httpBackend) {
$httpBackend.whenGET('/jogasok').respond([
{id: 1, name: 'asdfasdf'},
{id: 2, name: '2wrerwert'}
]);
}));
it('getJogasok should return everyone', inject(function(Global) {
expect(JSON.stringify(Global.getJogasok())).toBe(JSON.stringify([
{id: 1, name: 'asdfasdf'},
{id: 2, name: '2wrerwert'}
]));
}));
});
не работает.
Я пробовал это, но он терпит неудачу с ошибкой: Ошибка: нет ожидающего запроса на флеш! Заводской код, как вы можете видеть в моем вопросе. Таким образом, Jogas.query должен запускаться при вводе Global. Тем не менее, добавление к нему обратных вызовов успеха/ошибок показывает, что он никогда не вызывается. – Akasha
Я взял заводской код из вашего вопроса и успешно выполнил вышеуказанный тест. Попробуйте проверить, была ли эта служба создана в тесте: 'it ('should exist exist', function() {expect (!! Global) .toBe (true);});' – klode
Кроме того, поскольку ваша глобальная служба выполняет query() при создании экземпляра, вам может потребоваться переместить $ httpBackend.whenGet() перед тем, как войти в сервис «Глобальный». Я заметил, что это так, если вы запускаете тест в jsfiddle. Я изменил код выше, чтобы отразить это изменение. – klode