淘汰赛 - 单位测试计算的观测值

时间:2016-09-15 15:36:45

标签: unit-testing knockout.js jasmine

在淘汰赛中,我想使用jasmine对依赖于另一个observable的计算observable的值进行单元测试。

然而,它不起作用,因为当我改变另一个可观察量时,计算的observable的值不会更新。

这是我的(简化)视图模型:

function MarkersViewModel() {
    var self = this;   
    self.name = ko.observable("chad");
    self.computedName = ko.computed(function() {
        return self.name();
});

这是我的茉莉花规格:

describe("string", function() {
    var view_model = new MarkersViewModel();
    view_model.name = ko.observable("joe");

    it("returns the whole array when there is no filter", function() {
        expect(view_model.computedName()).toBe("joe");
    });
});

当我运行时,茉莉花失败了:

Expected 'chad' to be 'joe'.

关于我如何实现这一点的任何想法?

由于

2 个答案:

答案 0 :(得分:1)

您不应该重新创建可观察的,只是设置值:

describe("string", function() {
    var view_model = new MarkersViewModel();
    view_model.name("joe"); // <- here

    it("returns the whole array when there is no filter", function() {
        expect(view_model.computedName()).toBe("joe");
    });
});

你的计算范围的原始observable(在构造函数中分配了“chad”)并使用它。

答案 1 :(得分:0)

对于使用QUnit的相同解决方案解决方案可能有用:

test(" Test view_model.name ", function () {
    var view_model = new MarkersViewModel();
    view_model.name("joe");

    equal(view_model.computedName(), "joe");

});

https://github.com/thedom85/Javascript_Knockout_QUnit_Example