伪造/模拟单元测试的Javascript对象

时间:2013-01-23 13:33:24

标签: javascript unit-testing qunit

我日常工作的很大一部分工作涉及使用Dynamics CRM并编写JS以扩展表单上的功能。

Dynamics中的大多数客户端交互涉及使用在加载表单时为您提供的对象,这只是Xrm。所以你可能有类似的东西:

function OnLoad() {
    Xrm.Page.getAttribute('name').setValue('Stackoverflow!');
    var x = Xrm.Page.getAttribute('name').getValue();
}

我倾向于为Xrm对象编写一个包装器,主要是因为它比记住一些链接容易得多,最终得到的结果如下:

function WrappedXrm(realXrm) {
    var xrm = realXrm;

    this.getValue(name) {
        return xrm.getAttribute(name).getValue();
    }
}

//and then use it as so

var myXrm = new FakeXrm(Xrm);
var myXrmValue = myXrm.getValue('Name');

我正在尝试QUnit并想知道如何在这种情况下进行单元测试?

显然上面的例子是单行,可能不值得测试。但是假设那里有一些我想测试的业务逻辑。

我能看到的唯一方法是在每次测试之前按照

的顺序进行一些设置
var fakeXrm = {};
fakeXrm.Page = {};
fakeXrm.Page.getAttribute = function(name) {
    var tempAttr = {};
    tempAttr.getValue = function() {
        return 'A fake value';
    }
}

然后测试'A fake value'被退回,但这根本不适合我。

我哪里错了?

0 个答案:

没有答案