Как устранить ошибку при тестировании чайной ложки
Я новичок в тестировании чайной ложки для JS, и я создал файл тестирования JS, который дает мне следующую ошибку: Failure/Error: expected 0 to equal 'Form Label'
Относится к строке 63 в файле тестирования, и я поделюсь здесь двумя файлами, участвующими в этом тестировании. Я наверняка что-то упустил. Что мне нужно проверить, так это то, что все функции в другом файле JS выполняются правильно и дают правильный результат. Это тестирование генерации представления формы, которая должна содержать таблицу и форму. Но дает мне эту ошибку, и я думаю, потому что я что-то упустил.
Линия такая:expect(stub_3.getCall(0).args[0]).to.equal("Form Label");
Код тестирования:
// Study Version Editor: Annotated CRF
//
// Initialise
//
// @param [Integer] studyVersionId the id for the study version
// @return [void]
function SveAcrf(studyVersionId) {
this.progress = new SveProgress('#aCrfPb');
this.studyVersionId = studyVersionId;
this.html = []; // Array for resulting HTML
var _this = this;
// Button handlers
$('#study_acrf').click(function() {
$('#soa_table thead tr th, #soa_table tbody tr td').removeClass('success'); //success
_this.start();
});
$('#export_acrf').click(function() {
var table_data = $("<div />").append($("#soa_table").clone()).html()
// window.open('/study_versions/' + studyVersionId + '/export?study_version[export_type]=acrf&table_data='+table_data);
$("#soa_table_data").val(table_data)
$('#export_type').val("acrf")
$("#report_form").submit()
});
}
// Start the CRF build
//
// @return [void]
SveAcrf.prototype.start = function() {
var _this = this;
this.clear();
$.ajax({
url: "/study_versions/" + this.studyVersionId,
type: 'GET',
dataType: 'json',
success: function(result){
var forms = result.data.children;
if (forms.length > 0) {
_this.progress.clear(forms.length); // Set the progress total
var table = $("<div />").append($("#soa_table").clone()).html()
_this.html.push(table);
for (var i=0; i<forms.length; i++) {
_this.html.push(_this.placeholder(i, forms[i].label)); // Create the slot for the result.
_this.getForm(forms[i], i);
}
$("#aCrfHtml").append(_this.html.join(''));
} else {
displayWarning("Study does not include any forms at present, nothing to display.");
}
},
error: function(xhr,status,error){
handleAjaxError(xhr, status, error);
}
});
}
// Display form
//
// @param [JS Object] form structure containing the form id and namespace
// @param [Integer] index the index of the form
// @return [void]
SveAcrf.prototype.getForm = function(form, index) {
var _this = this;
$.ajax({
url: "/mdrs/form_annotations",
data: { "id": form.form_id, "namespace": form.form_namespace },
type: 'GET',
dataType: 'html',
success: function(result){
_this.displayForm(result, index);
setTimeout(function(){ $(".spinner_and_label_"+index).hide(); }, 500);
},
error: function(xhr,status,error){
handleAjaxError(xhr, status, error);
}
});
}
// Form display
//
// @param [result] the form html
// @param [Integer] index the index of the form
// @return [void]
SveAcrf.prototype.displayForm = function(result, index) {
this.html[index] = result; // Save the result in the correct slot
$("#aCrfHtml").append(this.html.join('')); // Joint the array to form the whole page.
this.progress.increment();
}
// Clear the CRF
//
// @return [void]
SveAcrf.prototype.clear = function() {
this.progress.clear(0);
this.html = [];
$("#aCrfHtml").html("");
}
// Placeholder html for building the CRF
//
// @param [String] label the form label
// @return [String] the html placeholder
SveAcrf.prototype.placeholder = function(index, label) { return '<div class="row spinner_and_label_'+index+'"><div class="col-md-3 col-sm-4"><p><i class="fa fa-spinner fa-spin fa-lg fa-fw margin-bottom"></i></p></div>' +
'<div class="col-md-9 col-sm-8"><p>Form: ' + label + ' will appear here ...</p></div></div>';
}
SveAcrf.prototype.openWindowWithPost = function (url, data) {
var form = document.createElement("form");
form.target = "_blank";
form.method = "POST";
form.action = url;
form.style.display = "none";
for (var key in data) {
var input = document.createElement("input");
input.type = "hidden";
input.name = key;
input.value = data[key];
form.appendChild(input);
}
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
Файл, который я тестирую:
//= require application
//= require sinon
//= require sve_progress
//= require sve_acrf
describe("Study Version aCRF", function() {
beforeEach(function() {
html =
'<div class="progress-bar" id="aCrfPb" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>';
html += '<div id="aCrfHtml"></div>'
fixture.set(html);
server = sinon.fakeServer.create();
});
afterEach(function() {
server.restore();
})
it("initialises the object", function() {
var crf = new SveAcrf(10);
expect(crf.studyVersionId).to.equal(10);
expect(crf.html).to.eql([]);
});
it("start CRF process", function() {
var stub_3_return = "<b>Return</b>";
stub_1 = sinon.stub(SveAcrf.prototype, "clear")
stub_2 = sinon.stub(SveAcrf.prototype, "getForm")
stub_3 = sinon.stub(SveAcrf.prototype, "placeholder")
stub_3.returns(stub_3_return)
var crf = new SveAcrf(5);
data = {
data: {
children: [{
id: 16,
form_id: "F-ACME_AEPI103",
form_namespace: "http://www.assero.co.uk/MDRForms/ACME/V1",
identifier: "AE1 01",
ordinal: 1,
label: "Form Label"
}],
description: "To be set",
id: 5,
identifier: "DEMO 2",
name: "2nd Demonstration",
protocol_name: "To be set",
semantic_version: "0.1.0"
}
};
server.respondWith("GET", "/study_versions/5", [
200, { "Content-Type": "application/json" },
JSON.stringify(data)
]);
crf.start();
server.respond();
expect(stub_1.calledOnce).to.be.true;
expect(stub_2.calledOnce).to.be.true;
expect(stub_3.calledOnce).to.be.true;
//expect(stub_2.getCall(0).args[0]).to.equal(data.data.children[0]);
expect(stub_2.getCall(0).args[0].id).to.equal(data.data.children[0].id);
expect(stub_2.getCall(0).args[1]).to.equal(0);
expect(stub_3.getCall(0).args[0]).to.equal("Form Label");
expect($("#aCrfHtml").html()).to.have.string(stub_3_return);
stub_1.restore();
stub_2.restore();
stub_3.restore();
});
it("start CRF process, no forms", function() {
stub_1 = sinon.stub(SveAcrf.prototype, "clear")
stub_2 = sinon.stub(window, 'displayWarning');
var crf = new SveAcrf(5);
data = {
data: {
children: [],
description: "To be set",
id: 5,
identifier: "DEMO 2",
name: "2nd Demonstration",
protocol_name: "To be set",
semantic_version: "0.1.0"
}
};
server.respondWith("GET", "/study_versions/5", [
200, { "Content-Type": "application/json" },
JSON.stringify(data)
]);
crf.start();
server.respond();
expect(stub_1.calledOnce).to.be.true;
expect(stub_2.calledOnce).to.be.true;
expect(stub_2.getCall(0).args[0]).to.equal("Study does not include any forms at present, nothing to display.");
SveAcrf.prototype.clear.restore();
stub_2.restore();
});
it("get a form", function() {
stub_1 = sinon.stub(SveAcrf.prototype, "displayForm")
var crf = new SveAcrf(5);
data = "<b>Bold</b>";
server.respondWith("GET", "/mdrs/form_annotations?id=A&namespace=http%3A%2F%2Fwww.example.com", [200, { "Content-Type": "html" }, data]);
crf.getForm({ form_id: "A", form_namespace: "http://www.example.com" }, 2);
server.respond();
expect(stub_1.calledOnce).to.be.true;
expect(stub_1.getCall(0).args[0]).to.equal(data);
expect(stub_1.getCall(0).args[1]).to.equal(2);
SveAcrf.prototype.displayForm.restore();
});
it("display a form", function() {
stub = sinon.stub(SveProgress.prototype, "increment")
var crf = new SveAcrf(5);
crf.html = ["", "", "", "", ""]
crf.displayForm("<b>Form</b>", 3);
expect(stub.calledOnce).to.be.true;
expect(crf.html).to.eql(["", "", "", "<b>Form</b>", ""]);
expect($("#aCrfHtml").html()).to.have.string("<b>Form</b>");
SveProgress.prototype.increment.restore();
});
it("display a form, multiple forms", function() {
stub = sinon.stub(SveProgress.prototype, "increment")
var crf = new SveAcrf(5);
crf.html = ["", "", "", "", "", ""]
crf.displayForm("<b>Form 3</b>", 3);
crf.displayForm("<b>Form 1</b>", 1);
expect(stub.calledTwice).to.be.true;
expect(crf.html).to.eql(["", "<b>Form 1</b>", "", "<b>Form 3</b>", "", ""]);
expect($("#aCrfHtml").html()).to.have.string("<b>Form 1</b><b>Form 3</b>");
SveProgress.prototype.increment.restore();
});
it("clears the display", function() {
stub = sinon.stub(SveProgress.prototype, "clear")
var crf = new SveAcrf(5);
crf.clear();
expect(stub.calledOnce).to.be.true;
expect(stub.getCall(0).args[0]).to.equal(0);
expect(crf.html).to.eql([]);
expect($("#aCrfHtml").html()).to.have.string("");
SveProgress.prototype.clear.restore();
});
it("creates the placeholder html", function() {
var expected = '<div class="row"><div class="col-md-3 col-sm-4"><p><i class="fa fa-spinner fa-spin fa-lg fa-fw margin-bottom"></i>' +
'</p></div><div class="col-md-9 col-sm-8"><p>Form: Name will appear here ...</p></div></div>';
var crf = new SveAcrf(5);
result = crf.placeholder("Name");
expect(result).to.equal(expected);
});
});