Как устранить ошибку при тестировании чайной ложки

Я новичок в тестировании чайной ложки для 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);
    });

});

0 ответов

Другие вопросы по тегам