单元测试jqgrid动作
Unit test jqgrid action
我需要验证是否使用 EmberJS 中的 mocha 单元测试调用了 jqxgrid 的 'rowClicked' 操作。我初始化了一个网格,可以验证它是否已呈现,行和 headers 已呈现,但我卡在 rowclick 事件上。我使用 jQuery 来模拟对这样一行的点击:
this.$('#row0grid_testgrid').trigger('click');
我的网格代码像这样监听 rowClick 事件:
this.grid().on('rowclick', function(evt) {
// My code here
});
我如何验证它是否被调用?
谢谢
你能做这样的事情吗 - 模拟函数?
/*** in your unit test ***/
//... get your grid object ...
const gridComponent = ....
// save the original function to assign it later back
const originalOn = gridComponent.on;
// now mock the on function
gridComponent.on = function(actionName, handler){
assert.ok(true, "on() function has been called");
assert.equal(actionName, "rowclick", "the action on which on() function has been triggered is correct");
}
// execute tested context
this.$('#row0grid_testgrid').trigger('click');
// tidy up
gridComponent.on = originalOn;
这里有几件事要提:如果这有效,您将测试 on()
已被调用并且它是在正确的操作 'rowclick' 上触发的。但是,您仍然无法在事件函数中测试代码“// My code here
”部分。
如果你想测试你的事件函数,你可以做的是从它调用匿名函数。让我告诉你我的意思:
/*** your component code ***/
// this will be called on "rowclick"
myComponentFunction: function(whatArgument){
// My code here
}
....
const self = this;
this.grid().on('rowclick', function(evt) {
// instead of pure code call a function
const someParameters = "foo";
self.myComponentFunction(someParameters);
});
...
在你的单元测试中你还可以模拟 myComponentFunction
:
// same unit test
....
const originalMyComponentFunction = gridComponent.myComponentFunction;
gridComponent.myComponentFunction = function(arg){
assert.ok(true, "myComponentFunction() has been called!");
// test argument, whatever
assert.equal(arg, "foo", "argument passed to myComponentFunction() from an event triggered on 'rowclick' is correct");
}
// tidy up myComponentFunction mock, too.
gridComponent.myComponentFunction = originalMyComponentFunction;
顺便说一句,设置模拟并整理它们的首选方法是将其放入 beforeEach() 和 afterEach(),查看 ember-cli testing guides。
如果你有更好的测试方法,我也想向你学习:)
我需要验证是否使用 EmberJS 中的 mocha 单元测试调用了 jqxgrid 的 'rowClicked' 操作。我初始化了一个网格,可以验证它是否已呈现,行和 headers 已呈现,但我卡在 rowclick 事件上。我使用 jQuery 来模拟对这样一行的点击:
this.$('#row0grid_testgrid').trigger('click');
我的网格代码像这样监听 rowClick 事件:
this.grid().on('rowclick', function(evt) {
// My code here
});
我如何验证它是否被调用? 谢谢
你能做这样的事情吗 - 模拟函数?
/*** in your unit test ***/
//... get your grid object ...
const gridComponent = ....
// save the original function to assign it later back
const originalOn = gridComponent.on;
// now mock the on function
gridComponent.on = function(actionName, handler){
assert.ok(true, "on() function has been called");
assert.equal(actionName, "rowclick", "the action on which on() function has been triggered is correct");
}
// execute tested context
this.$('#row0grid_testgrid').trigger('click');
// tidy up
gridComponent.on = originalOn;
这里有几件事要提:如果这有效,您将测试 on()
已被调用并且它是在正确的操作 'rowclick' 上触发的。但是,您仍然无法在事件函数中测试代码“// My code here
”部分。
如果你想测试你的事件函数,你可以做的是从它调用匿名函数。让我告诉你我的意思:
/*** your component code ***/
// this will be called on "rowclick"
myComponentFunction: function(whatArgument){
// My code here
}
....
const self = this;
this.grid().on('rowclick', function(evt) {
// instead of pure code call a function
const someParameters = "foo";
self.myComponentFunction(someParameters);
});
...
在你的单元测试中你还可以模拟 myComponentFunction
:
// same unit test
....
const originalMyComponentFunction = gridComponent.myComponentFunction;
gridComponent.myComponentFunction = function(arg){
assert.ok(true, "myComponentFunction() has been called!");
// test argument, whatever
assert.equal(arg, "foo", "argument passed to myComponentFunction() from an event triggered on 'rowclick' is correct");
}
// tidy up myComponentFunction mock, too.
gridComponent.myComponentFunction = originalMyComponentFunction;
顺便说一句,设置模拟并整理它们的首选方法是将其放入 beforeEach() 和 afterEach(),查看 ember-cli testing guides。
如果你有更好的测试方法,我也想向你学习:)