Я пытаюсь провести некоторое испытание с Жасмин и Требование. Все прошло очень хорошо, пока я не заметил, что у меня возникла проблема с контекстом описываемых функций.Асинхронный тест с жасмином
Я делаю тест Ajax, поэтому первое, что я делаю, это настроить слушателя на успех, а затем запросить его. Затем, в каждом из моих объявлений it()
, я делаю свои тесты на основе ответа службы.
Вот мои spec modules:
// auth.js
define(['service/auth'], function(auth) {
describe('Tests "auth" service', function() {
var data;
var OPTIONS = {
CN: '147144147',
GV: '147153162'
};
auth.on.success.addOnce(function(response) {
data = response;
});
auth.request(OPTIONS);
it('"status" should exist and be "true"', function() {
waitsFor(function() {
return data !== undefined;
});
runs(function() {
expect(data['status']).toBeDefined();
expect(data['status']).toBeTruthy();
});
});
});
});
// login.js
define(['service/login'], function(login) {
describe('Tests "login" service', function() {
var data;
var OPTIONS = {
oper: 1,
codigoouemail: '101',
senha: '10151015'
};
login.on.success.addOnce(function(response) {
data = response;
});
login.request(OPTIONS);
it('Should get the service response for user "' + OPTIONS.codigoouemail + '"', function() {
waitsFor(function() {
return data !== undefined;
});
runs(function() {
expect(data).toBeDefined();
});
});
});
});
Они оба прекрасно работают при испытании по отдельности, но то, что я заметил, что они одни и те же значения для data
. Первый модуль для запуска, устанавливает его значение, а остальные спецификации будут иметь одинаковое значение. Мне нужно иметь одно значение для каждого модуля, чтобы я мог проверить каждый ответ службы должным образом. Теоретически каждый модуль должен иметь свой собственный охват, но не выглядит так, как это происходит.
У кого-нибудь есть идея, как это решить?
На стороне примечание, [Jasmine 2.0.0] (http://jasmine.github.io/2.0/introduction.html) теперь имеет необязательный параметр 'done' для' it() ', который позволяет писать асинхронные тесты с меньшим количеством кода. Также обратите внимание, что если вы используете [Karma test runner] (http://karma-runner.github.io/0.10/index.html), [Karma в настоящее время поставляется в комплекте с Jasmine 1.3.1] (http: //stackoverflow.com/a/21117832/456814), поэтому вы не сможете использовать новый параметр 'done' в этом случае (по крайней мере, пока Karma не обновит свою версию Jasmine). –
[Тестирование асинхронного Javascript с Jasmine 2.0.0] (http://blogs.lessthandot.com/index.php/webdev/uidevelopment/javascript/testing-asynchronous-javascript-w-jasmine/) - хорошая запись в блоге на как использовать новый Jasmine 2.0.0 'done', если у вас есть эта версия Jasmine. –
@Cupcake О, наконец! Качественный товар. В настоящее время я запускаю тесты с Konacha plus Sinon и Chai. Я должен дать Жасмине еще один шанс :) –